一、java的I/O流

1. 输入流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(InputStream 和Reader作为基类)

2、输出流(字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的是16位的字符)(outputStream和Writer作为基类)

划分输入流和输出流是从内存角度考虑划分。如:数据从服务器通过网络流向客户端,server端的内存将数据输出到网络(用输出流),client将网络中的数据输入内存(用输入流)。

创建字节输入流代码: FileInputStream    fis = new FileInputStream(new  File("D://info.txt"));

创建字符输入流代码:FileReader   fr = new FileReader(new  File("D://info.txt"));

可能用到ileInputStream    和 InputStreamReader两个对象,来看FileInputStream    和 InputStreamReader的区别:

前者的构造函数是有一个文件类型的参数,没有设定编码,是读取的字节,需要用字节数组接受,至于你读取后的字节要转换为字符输出需要后续处理;

FileInputStream  fis = null;

 try {

fis = new FileInputStream(new  File("D://info.txt"));

byte [] bbuf = new byte[1024];

int hasread = 0;

while((hasread = fis.read(bbuf))>0){

String str1 = new String(bbuf, "UTF-8");//to UTF-8 string  

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

fis.close();

}

后者的构造函数是含有两个参数,一个是关联的文件File或FileReader,另一个则是字符串类型的字符编码,此时读取的数据已经不是字节,而是字符。

FileInputStream  fr = null;

InputStreamReader  ir = null;

 try {

fr = new FileInputStream(new  File("D://info.txt"));

ir  = new InputStreamReader(fr,"UTF-8");

char [] cbuf = new char[32];

int hasread = 0;

while((hasread = ir.read(cbuf))>0){ //最多读取cbuf中的32个字符;

System.out.println(new String(cbuf));

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

finally{

fr.close();

}

要关闭输入输出流,因为流不单在内存中分配了空间,也在操作系统中占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以要调用close()方法来通知os释放资源。

二、java节点流和处理流的概念:

节点流:可以从或者向一个特定的I/O设备(如磁盘、网络)读(写)数据,节点流与底层的I/O设备、文件交互。

处理流:用于包装节点流,是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

JAVA常用的节点流有以下几个:  

  文 件 FileInputStream 、FileOutputStrean、 FileReader 、FileWriter 文件进行处理的节点流。

  字符串 StringReader、 StringWriter 对字符串进行处理的节点流。

  数 组 ByteArrayInputStream 、ByteArrayOutputStream、CharArrayReader、 CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

    管 道 PipedInputStream 、PipedOutputStream 、PipedReader、PipedWriter对管道进行处理的节点流。

    父 类 InputStream 、OutputStream 、Reader 、Writer

常用处理流(关闭处理流需要关闭里面的节点流)

  缓冲流:BufferedInputStrean、 BufferedOutputStream 、BufferedReader、 BufferedWriter,增加缓冲功能,避免频繁读写硬盘。

  转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。

  数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来,

java输入输出--I/O操作基础知识学习的更多相关文章

  1. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  2. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  3. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  4. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  5. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  6. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  7. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  8. 【ABAP系列】SAP ABAP-模块 字符串操作基础知识

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP-模块 字符串操 ...

  9. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

随机推荐

  1. 习题练习-第1章ASP.NET MVC概述

    一.选择题 1.ASP.NET MVC自2007年首次公布预览以来,作为(    )的替代品,普及度已明显提高,现在很多大型Web应用程序都是使用这一技术构建的. A.ASP    B.ASP.NET ...

  2. @angular/cli项目构建--Dynamic.Form(2)

    form-item-control.service.ts update @Injectable() export class FormItemControlService { constructor( ...

  3. A*B problem(FFT)

    #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #inclu ...

  4. 剑指offer--16.数组中重复的数字

    时间限制:1秒 空间限制:32768K 热度指数:198342 本题知识点: 数组 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复 ...

  5. 2018.7.9 AVR-BAT program

    I had some problems programming the produced . Here is what worked well for me: -------------------- ...

  6. uva1605 - Building for UN(构造法)

    这道题构造出的结果很妙,考察思维能力.就两层,每层都n*n个格子,第一层第i行都放国家i,第二层第j列都放国家j. 需要注意的是ASCII中A至Z在a至z的前面(数字小),而且它们两组不挨着.所以需要 ...

  7. redis3.2.11 安装

    wget http://download.redis.io/releases/redis-3.2.11.tar.gz [root@hdp01 src]# .tar.gz -C /opt/ [root@ ...

  8. redis的no-appendfsync-on-rewrite参数

    redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...

  9. 修改git commit 最后一次提交的注释信息 以及如何退出git bash vim编辑器

    https://www.cnblogs.com/sandy-happyhour/p/5950084.html 今天用git commit -m “注释”提交的时候,注释写错了,于是各种查资料开始了和g ...

  10. python 图形化(Tkinter)

    python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.T ...