JAVA IO流详解
2016-06-28 19:31
483 查看
根据IO对数据处理类型的不同,分为字节流和字符流,根据数据的流向分为输入流和输出流,JAVA IO流类图如下:
(1)、字符流和字节流的区别:
首先JAVA中字符流是Reader、Writer结尾的,字节流是Stream结尾的。字符流是根据数据编码的不同,对字符进行操作的流对象,其本质是根据字节流操作后,再去查询相关的编码表,
a、操作单位不同:字节流是以字节8bits为单位,而字符可能操作多个字节。
b、操作的数据类型不同:字节流可以操作所有的数据类型,而字符流只能处理纯文本类型的数据。
(2)节点流类型:节点流就是直接操作源数据,典型的节点流就是操作文件流,如:文件的字节输入流(FileInputStream),
(3)、处理流:
该类型的流是对一个已经存在的流进行包装, 处理流的构造方法中带有另一个流对象作为参数。也就是,包在别的流上得流。
a、缓冲流:BufferedInPutStream 、BufferedOutPutStream和BufferedWriter、BufferedReader,这是提高效率的。写入缓冲区对象:
BufferedWriter bw = new BufferedWriter(new
FileWriter("buf.txt"));
BufferedInput bufferedInput =
new BufferedInputStream(new FileInputStream(“buf.txty”));
该类型的流有一个readLine()方法;一次读取一行,读到行标记时,将之前读到的数据作为一个字符串返回,当读到文件结尾时,返回null, 其原理还是利用缓冲区流对象的read()方法,只不过每次读到一个字符(字节)先不进行操作,先进行临时存储,当读到回车时,将临时存下了的数据一次返回。
b、转换流:InputStreamReader、OutputStreamWriter
该类型主要是为了在字符类流和字节流之间的转换桥梁,该流对象可以对读到的字节数据可以进行指定编码的编码转换。
该流的构造函数如下:
InputStreamReader(InputStream);//字符到字节流的转换,带有字节流inputStream,采用系统默认的编码表GBK
InputStreamReader(InputStream ,String charSet)//制定编码表
OutputStreamWriter(OutputStream);
OutputStreamWriter(OutputStream,String charSet);
注意:在使用FileReader操作文本数据时,该对象使用的时默认的编码表,即
FileReader fr=new FileReader(“a.txt”); 与 InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")); 的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流时必须的。即:
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);
c、数据流:DataInputStream ,DateOutputStream
该流可以对一些基本的数据类型进行直接存取和读写,不需要进一步转换,
d、打印流:printStream,printWriter
printStream字节打印, system.out对应的类型就是printStream,
e、对象流 ObjectInputStream ,ObjectoutputStream,
(1)、字符流和字节流的区别:
首先JAVA中字符流是Reader、Writer结尾的,字节流是Stream结尾的。字符流是根据数据编码的不同,对字符进行操作的流对象,其本质是根据字节流操作后,再去查询相关的编码表,
a、操作单位不同:字节流是以字节8bits为单位,而字符可能操作多个字节。
b、操作的数据类型不同:字节流可以操作所有的数据类型,而字符流只能处理纯文本类型的数据。
(2)节点流类型:节点流就是直接操作源数据,典型的节点流就是操作文件流,如:文件的字节输入流(FileInputStream),
(3)、处理流:
该类型的流是对一个已经存在的流进行包装, 处理流的构造方法中带有另一个流对象作为参数。也就是,包在别的流上得流。
a、缓冲流:BufferedInPutStream 、BufferedOutPutStream和BufferedWriter、BufferedReader,这是提高效率的。写入缓冲区对象:
BufferedWriter bw = new BufferedWriter(new
FileWriter("buf.txt"));
BufferedInput bufferedInput =
new BufferedInputStream(new FileInputStream(“buf.txty”));
该类型的流有一个readLine()方法;一次读取一行,读到行标记时,将之前读到的数据作为一个字符串返回,当读到文件结尾时,返回null, 其原理还是利用缓冲区流对象的read()方法,只不过每次读到一个字符(字节)先不进行操作,先进行临时存储,当读到回车时,将临时存下了的数据一次返回。
b、转换流:InputStreamReader、OutputStreamWriter
该类型主要是为了在字符类流和字节流之间的转换桥梁,该流对象可以对读到的字节数据可以进行指定编码的编码转换。
该流的构造函数如下:
InputStreamReader(InputStream);//字符到字节流的转换,带有字节流inputStream,采用系统默认的编码表GBK
InputStreamReader(InputStream ,String charSet)//制定编码表
OutputStreamWriter(OutputStream);
OutputStreamWriter(OutputStream,String charSet);
注意:在使用FileReader操作文本数据时,该对象使用的时默认的编码表,即
FileReader fr=new FileReader(“a.txt”); 与 InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")); 的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流时必须的。即:
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);
c、数据流:DataInputStream ,DateOutputStream
该流可以对一些基本的数据类型进行直接存取和读写,不需要进一步转换,
d、打印流:printStream,printWriter
printStream字节打印, system.out对应的类型就是printStream,
e、对象流 ObjectInputStream ,ObjectoutputStream,
相关文章推荐
- java IO流文件的读写具体实例
- JAVA IO流的基本认识
- 装饰类设计模式 【不完善版】 IO流
- IO流操作规律 转码
- 重置标准输入输出流 IO流
- File工具类
- 【Java基础】IO流操作
- 【代码练习】学生成绩排名--涉及IO流和集合
- JAVA基础-IO流
- IO(输入输出流) 4000
- Java培训-IO流补充
- IO流操作规律(一)
- 黑马程序员————————IO流 FileWriter类 和 FileReader类的一些基本用法
- 黑马程序员--Java基础--IO流
- io 学习
- BufferedInputStream
- javaIO继承关系
- io流(一)
- 黑马程序员—装箱拆箱与IO流重点
- 黑马程序员——java基础——IO流(2)File类,IO常用流对象及IO包中其他类