为什么要 close ?
Java垃圾回收器只能管理程序中的类的实例对象,没法去管理系统产生的资源,所以程序要调用 close 方法,去通知系统去释放其自身产生的资源。
这两个类都只提供了对字节或字节数组进行读出的方法。对于字符串的读写,我们还需要进行额外的转换。
Reader和Writer
1. 抽象类,用于直接读取字符串文本
2. Java为字符文本(直接读取字符串)的输入输出专门提供的一套单独的类,其在处理字符串时简化了我们的编程。
对上面的程序进行如下的修改:—— 使用FileWriter 和 FileReader类来实现直接对字符串的读取:
public class FileStreamDemo2 { public static void main(String[] args) { File f = new File("Hello.txt"); try { FileWriter out = new FileWriter(f); out.write("hello world,hahaha"); out.close(); } catch (Exception e) { e.printStackTrace(); } try { FileReader in = new FileReader(f); char[] buf = new char[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); } catch (Exception e) { e.printStackTrace(); } } } |
FileReader的真正优势要结合包装流类才能体现出来!!
PipedInputStream 与 PipedOutputStream
一个PipeInputStream对象必须和一个PipedOutputStream对象进行连接而产生一个通信管道。
这两个类主要来完成线程之间的通信。 --- p 266
一个线程的PipedInputStream对象能够从另一个线程的PipedOutputStream对象中读取数据。
void connect(PipedOutputStream src)使此管道输入流连接到管道输出流 src。
JDK还提供了PipedWriter和PipedReader这两个类来用于字符串文本的管道通信。
使用管道流,可以实现各个程序模块之间的松耦合通信。
ByteArrayInputStream 与 ByteArrayOutputStream
1. 使用字节数组作为数据源
2. 作用:使用IO流的方式来完成对字节数组内容的读写
IO程序代码的复用
由于没有编码为 -1 的字符,所以OS使用 -1 作为硬盘上的每个文件的结尾标记
文本文件与二进制文件:
1. 如果一个文件专用于存储文本字符的数据,没有包含字符之外的其他数据,我们称之为文本文件
2. 除此之外的文件就是二进制文件
为了支持标准输入输出设备,Java定义了两个特殊的流对象:System.in 和 System.out
System.in 对应键盘,是InPutStream类型的,从键盘读取数据
System.out 对应屏幕,是PrintStream类型的
Scanner类
该类不属于IO类,而属于util类
它是一个可以用正则表达式来解析基本类型和字符串的简单文本扫描器
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的next 方法将得到的标记转换为不同类型的值。
例如从键盘读取一行输入:
<span style="font-size:14px;"> Scanner cin = new Scanner(System.in);
String name = cin.nextLine();</span>
过滤流与包装流:
--- 即中间类,为哦我们往IO设备中写入各种类型的数据提供了帮助
DataOutputStream
writeBoolean()
writeShort()
writeChar()
writeInt()
......