根据不同的角度,可以分为不同的种类。
从数据单位角度来分,分为:字节流和字符流两种。
从流向角度来分,分为:输入流和输出流两种,其中这是相对于内存来说的输入输出。
从流的角色来分,分为:节点流和处理流。
字节流和字符流
字节流:InputStream(抽象),OutputStream(抽象),它的具体子类有:FileInputStream,FileOutputStream。
字符流:Reader(抽象),Writer(抽象),它的具体子类有: FileReader、FileWriter。
缓冲流(处理流的一种)
字节流:BufferedInputStream(字节缓冲输入流)和BufferedOutputStream(字节缓冲输出流)。
字符流:BufferedReader(字符缓冲输入流)和BufferedWriter(字符缓冲输出流)。
注意点
节点流可以直接连接文件和程序(内存),但是处理流不能。例如:缓冲流要在节点流或其它缓冲流外面,即不能单独使用缓冲流。
@Test
public void testBufferedInputStream() {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(new File("hello.txt")));
bos = new BufferedOutputStream(new FileOutputStream(new File("hello3.txt")));
byte[] buff = new byte[1024];
int len;
while ((len = bis.read(buff)) != -1) {
bos.write(buff, 0, len);
// 控制台中输出内容
String str = new String(buff, 0, len);
System.out.println(str);
}
System.out.println("复制成功");
} catch (IOException e) {
e.printStackTrace();
System.out.println("复制失败");
} finally {
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}