以stream结尾都是字节流,以reader和writer结尾都是字符流,两者的区别就是读写的时候一个是按字节读写,一个是按字符。在实际使用时差不多。
在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。
package input;
import java.io.ByteArrayInputStream;
import java.io.IOException;
// 输入字节流InputStream的实现
// 字节数组作为输入源——ByteArrayInputStream
//
// 该类包括两个构造方法
//
// ByteArrayInputStream(byte[] buf);
// ByteArrayInputStream(byte[] buf,int offset,int length );
// 该类重写了InputStream中的所有方法,因此我们可以调用其父类同名的方法进行读写操作。
//
// 下面是如何通过一个字节数组创建字节输入流的过程,并从输入流中读取数据输出到操作台。
public class TestByteArrayInputStream1 {
public static void main(String[] args) throws IOException {
// 初始化字节数组
byte[] buf = new byte[3];
buf[0] = 100;
buf[1] = 101;
buf[2] = 102;
// 创建输入流
ByteArrayInputStream input = new ByteArrayInputStream(buf);
// 从输入流中读取数据
byte[] out = new byte[3];
input.read(out);
System.out.println(new String(out));
// 关闭输入流
input.close();
// 只能读取指定的字节数,不能读取的数据过多,有可能会超过内存的限制
}
}
package com.qfedu.c_reader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/*
IO input Output
字节流:
InputStream
FileInputStream
OutputStream
FileOutputStream
字符流:
字符流 = 字节流 + 解码
字符流读取数据,输入字符流
---| Reader 输入字符流的基类/超类 抽象类
------| FileReader 读取文件的输入字符流
使用方式:
1. 找到文件
判断文件是否存在,是否是一个普通文件
2. 建立FileReader读取通道
3. 读取数据
4. 关闭资源
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
//readerTest2();
}
public static void readerTest2() throws IOException {
long start = System.currentTimeMillis();
// 1. 找到文件:
File file = new File("");
// 判断文件是否存在,是否是一个普通文件
if (!file.exists() || !file.isFile()) {
throw new FileNotFoundException();
}
// 2. 建立FileReder 输入字符流管道
FileReader fr = new FileReader(file);
//3.建立缓冲区,利用缓冲区读取数据, 创建字符数组作为缓冲区
int length = -1; //用于保存读取到的字符个数
char[] buffer = new char[1024];
while ((length = fr.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, length));
}
//4. 关闭资源
fr.close();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
}
}
网友评论