Java IO 3 : 字节流 和 字符流
InputStream 和 Reader: InputStream 和 Reader 是所有输入流的抽象基类 , 本身并不能创建实例执行输入,但是他们是所有输入流的模板,他们的方法是所有输入流都可以使用的方法 InputStream: int read() 从输入流中读取单个字节,返回读取的字节数据(字节属猪可以直接转换成int类型) int read(byte[] b) 从输入流中读取b.length个字节数据,并将其存储在字节数组中,返回实际读取的字节数 int read(byte[]b , int off , in len) 从输入流中读取最多len个字节的数据,并将其存储在数组b中,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。 Reader: int read() 从输入流中读取单个字符 int read(char[] cbuf) 从输入流中读取cbuf.length个字符数据,并将其存储在字符数组中,返回实际读取的字符数 int read(char[] cbuf , int off , int len) 从输入流中 , 读取len个字符的数据, 将其存储在cbuf字符数组当中,放入数组中时并不是从数组的七点开始, 而是从off位置开始,返回实际读取的字符数 InputStream和Reader 移动记录指针的方法: void mark(int readAheadLimit) 在记录指针当前位置记录一个标记(mark) boolean markSupported() 判断此输入流是否支持mark()操作,即是否支持标记 void reset() 将此流的记录指针重新定位到上一次记录标记mark的位置 long skip(long n) 记录指针向前移动n个字节/字符
OutputStream和Writer:相应的方法 void write(int c) 将制定的字节/字符输出到输出流中,c既可以代表字节,也可以代表字符 void write(byte[]/char[] buf) 将字节数组/字符数组中的数据传输到指定流中 void write(byte[]/char[] buf , int off , int len) 将字节数组/字符数组中从off开始,长度为len的字节/字符输出到输出流中 Writer 可以用字符串来代替字符数组,还有String对象作为参数。 void write(String str) 将str字符串里包含的字符输出到指定输出流中 void write(String str , int off , int len) 将Str字符串里从off开始,长度为len的字符输出到指定的输出流中
操作流的步骤:
1.建立流的管道,需要一个明确的File数据源
2.进行字节/字符的读/写的操作
3.操作完毕,关闭流
public class File02 { public static void main(String[] args) throws IOException { //创建一个输入流管道 FileInputStream fis = new FileInputStream(new File("D://demo/a.txt")); //创建一个长度为1024的水桶 byte[] b = new byte[1024]; //用户保存实际读取的字节数 int hasRead = 0; FileOutputStream out = new FileOutputStream(new File("D://demo/acopy.txt")); while((hasRead = fis.read(b)) != -1) { //取出水桶中的水, 然后做需要的操作 out.write(b , 0 , hasRead); } //关闭流 out.close(); fis.close(); } }
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | BiteArrayInputStream | BiteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
温故而知新