Java类中的IO分为输入和输出两部分。任何自Inputstream或Reader派生的类都含有read()方法,用于读取单个字节或者字节数组,任何自Outputstream或Writer派生的类都含有write()方法,用于写入单个字节或字节数组。但是这些方法通常不是给我们直接使用的,一般用于别的类,以便提供更有用的接口。JAVA IO之所以负责,就在于,通常我们要创建类对象不是单一的,而是叠合使用多个对象来提供所期待的功能。(使用装设这模式,创建单一结果流,却需要创建多个对象)。
首先要明确一点,就是类的设计者限定与输入有关的所有类都应该从InputStream类继承,与输出有关的所有类都应该从OutputStream类继承。
1.inputStream类型
类 | 功能 |
ByteArrayInputStream | 将内存的缓冲区当做InputStream使用 |
StringBufferInputStream | 将String转换为InputStream |
FileInputStream | 从文件中读取信息 |
PipedInputStream | 产生用于写入相关PipedOutputStream的数据 |
SequenceInputStream | 将两个或者多个InputStream对象转换为单一InputStream |
FilterInputStream | 抽象类,作为装饰器的接口。用于为其他Inputstream类提供有用的功能 |
2.outputStream类型
类 | 功能 |
ByteArrayOutputStream | 内存中创建缓冲区,所有送往流的数据都放在此 |
FileOutputStream | 将信息写进文件 |
PipedOutputStream | 任何写入其中的信息都会作为PipedOutputStream的输出 |
FilterOutputStream | 抽象类,装饰器接口,用于为其他的outputstream提供功能 |
Reader和Writer:面向字符流。在把来自字节层面的类转换到字符层面的类的时候,要用到适配器类:InputStreamReader可以把InputStream转换为Reader,OutputStreamWriter可以把OutputStream转换为Writer。注意一点就是,尽量尝试使用Reader和Writer,一旦成武代码无法成功编译的时候,再使用面向字节的类库。
下面列出我平时针对指定要处理的对象,会使用到的流。
1.文件
//文件处理
String fileHandle(String filename){
BufferedReader bufferedReader = new BufferedReader(new
FileReader("resources/dirlist.txt"));
String str;
StringBuilder stringBuilder = new StringBuilder();
while((str=bufferedReader.readLine())!=null){
stringBuilder.append(str+"\n");
}
bufferedReader.close();
return stringBuilder.toString();
}