7. jvm之io之字符流与字节流总括
1、Java IO 流
io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作,Java把不同的输入输出抽象为流,通过流的方式允许Java程序使用相同的方式来访问不同的输入、输出。
2、流的分类
输入流、输出流
A、输入流:只能从中读取数据,而不能向里面写数据
B、 输出流:只能向里面写数据,而不能读数据
可以这样理解,数据从内存到硬盘,通常认为是输出流,即写操作;相反,从硬盘到内存,通常认为是输入流,即读操作;这里的输入、输出是从内存的角度划分的。
Java的输入流主要有InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类;
字节流和字符流
字节流和字符流区别非常简单,它们的用法几乎一样。区别在于字节流和字符流所操作的数据单元不同:字节流操作的最小单元数据是8位字节,而字符流作为最小数据单元是16为字节。
字节流主要由InputStream、OutputStream作为基类,而字符流则主要由Reader和Writer作为基类完成。
字节和字符流方法介绍
字节输入流InputStream和字符输入流Reader
InputStream和Reader是所有输入流的基类,他们都是2个抽象类,本身并不能创建实例来执行输入,但他们有输入流的模版,所以它们的方法是所有的输入流和输出流可以用的方法。
在InputStream里常用的方法:
- int read(): 从输入流中读取单个字节
- int read(byte[] b): 从输入流中读取最多b.length个字节,将读取的字节存在数组b中,返回实际读取的字节数
- int read(byte[] b, int off, int len): 从输入流中读取最多len个字节数据,并将其存储在数字b中,放入b数组中时,并不是从数组起点开始,而是从off位置开始,返回实际读取字节数。
在Reader里经常使用的方法:
- int read(): 从输入流中读取单个字符
- int read(char[] c): 从输入流读取最多c.length个字符数据,并将其存储在字符数组c中,返回实际读取的字符
- int read(char[] c, int off, int len): 从输入流中读取最多len个字符的数据,将读取的数据放到字符数组c中保存,从数组的off开始读取;
InputStream、Reader还支持如下几个方法移动指针: - void mark(int readAheadLimit): 在记录指针当前位置第一个标记(mark)
- boolean markSupported(): 判断此输入流是否支持mark()操作,即是否支持记录标记
- void reset():将此流的记录的指针重新定位到上一次记录的标记的位置
- long skip(long n):记录指针向前移动n个字节、字符
OutputStream字节输出流和Writer字符输出流
具有以下方法:
- void write(int c): 指定的字节、字符输出到输出流中
- void write(byte[]/char[] buf): 将字节数组/字符数组中的数据传输到指定输出流中
- void write(byte[]/char[] buf, int off,int len):将指定数组中的数据输出到指定输出流中
byte[]是OutputStream的方法,char[]是Writer的方法
字符输出流还有以下方法:
- void write(String s):将指定字符串输出到指定输出流中
- void write(String s, int off, int len):将字节数组、字符数组中从off位置开始,长度为len的字节、字符输出到输出流中