"这篇笔记主要记录了IO流的基础知识,包括处理流和节点流的概念,以及在Java中如何进行文件读写、字节流、转换流的使用,同时还涉及到了对象的序列化与反序列化操作。"
在Java中,IO(Input/Output)流是用来处理数据输入和输出的技术。IO流分为两大类:节点流和处理流。节点流是从特定位置(如文件)读写数据的基础流,如`FileWriter`用于向文件写入数据。而处理流是对节点流进行包装的流,例如`BufferedWriter`,它增强了节点流的功能,提高了数据读写的效率。
`BufferedWriter`和`BufferedReader`是常用的处理流,它们内部维护了一个缓冲区,可以批量读写数据,从而提高性能。`BufferedWriter`提供`newline()`方法,可以在任何平台上插入换行符;而`BufferedReader`的`readLine()`方法则可以读取一行文本,但不包括末尾的换行符。
字节流主要用于处理二进制数据,如图片和视频。在文件写入方面,`FileOutputStream`是基本的字节流,适合写入二进制数据。读取文件时,`FileInputStream`用于读取字节。处理流`BufferedOutputStream`和`BufferedInputStream`可以增强字节流的性能。如果需要将多个小的`byte[]`数组合并成一个大的`byte[]`,可以使用数组拼接或者内存映射文件等方法。
转换流的作用是将字节流转换为字符流,以适应不同编码格式的需求。`InputStreamReader`是将`InputStream`转换为`Reader`,而`OutputStreamWriter`则是将`OutputStream`转换为`Writer`。例如,`System.out.println("abc")`中的`out`是一个字节流,但通常我们需要输出的是字符串,因此系统会在内部自动将`OutputStream`转换为`PrintWriter`或`PrintStream`,这样就能处理字符数据。
在Java中,对象的序列化是将对象的状态转换为字节序列的过程,可以持久化对象或在网络中传输。`ObjectOutputStream`用于对象的序列化,而`ObjectInputStream`则用于反序列化,恢复对象的状态。序列化和反序列化在实现数据持久化、网络通信等方面有着重要作用。
这个笔记涵盖了Java IO基础,包括基本的流类型、缓冲流的使用、字节流与字符流的转换,以及对象序列化的概念和操作。对于初学者来说,这些内容是理解和使用Java IO系统的关键。