I/O或者输入/输出, 指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。
流的基本概念
流是一个抽象的概念。当Java程序需要从数据源读取数据时或输出数据到目的地时,会开启一个到数据源的流。数据源(目的地)可以是文件,内存或者网络等。
流分为字节流和字符流。字节(byte)流需要用户读入后进行相应的编码转换,而字符(char)流读取数据时会把数据按照JVM的默认编码自动转换成字符。
字节流:InputStream和OutputStream,字符流:Reader和Writer。
字节流
输入流中跟数据源直接接触的类有:FileInputStream 和 ByteArrayInputStream,他们分别实现了从文件或者内存中的字节数组读入数据到输入流。
跟数据目的地直接接触的类有:FileOutputStream 和 ByteArrayOutputStream,前者实现了把数据流写入文件的功能,后者实现了一个输出流,其中的数据被写入一个 byte 数组。
其他的输入流、输出流处理类都是装饰类(Decorator模式),下面对他们进行一下简单介绍:
BufferedInputStream: 提供了缓冲功能。
DataInputStream: 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
BufferedOutputStream: 提供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出。
DataOutputStream: 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
字符流
流中的其他方法
Writer或者OutputStream中的flush(): 刷新该流的缓冲,用于确保数据的输出。
close(): 关闭流并释放与之关联的所有系统资源。