javaio流知识点
时间: 2024-12-26 15:21:07 浏览: 10
### Java IO 流知识点教程
#### 了解基本概念和流分类
Java 输入/输出(IO)是应用程序与外部环境之间进行数据交换的核心机制之一。java.io包中的类库提供了多种方式来处理这些交互,包括但不限于文件系统、网络连接和其他资源的操作[^1]。
#### 字节流与字符流的区别
在 Java 中有两种主要类型的流:字节流用于传输原始二进制数据;而字符流则专门设计用来高效地读写 Unicode 文本信息。对于每种类型都有对应的输入流(Input Stream) 和 输出流(Output Stream)[^4]。
#### 文件专属流介绍
为了方便对本地磁盘上的文件执行读取或保存操作,Java 提供了几种类别特别针对文件访问优化过的流对象。其中包括`FileInputStream` 和 `FileOutputStream`, 它们允许直接从文件中读取字节或将字节序列化入指定位置; 同样还有面向字符级别的`FileReader` 及其对应写出版本`FileWriter` [^2].
#### 使用转换器实现不同编码间的互转
当需要将一种形式的数据转化为另一种时——比如把字节数组变成字符串或者反之亦然,则可以利用诸如`InputStreamReader` 或者 `OutputStreamWriter`这样的适配器来进行必要的编码解码工作。这使得即使底层物理介质只支持特定格式(如ASCII),也可以轻松处理更复杂的文本表示法[如 UTF-8][^2].
#### 缓冲技术提升性能表现
通过引入额外的一层抽象即所谓的“缓冲”,可以在一定程度上减少频繁调用实际设备驱动所带来的开销并提高整体吞吐量。具体来说就是采用像`BufferedReader`,` BufferedWriter` 这样的高级组件,在内存里预先分配一块区域暂存即将被处理的信息片段直到达到一定规模再统一提交给目标端点[如硬盘扇区],从而获得更好的效率增益.
#### 处理结构化的二进制数据
如果要读写带有固定布局定义的复合型记录而非单纯连续排列着简单数值字段的内容的话,那么就应该考虑运用到`DataInputStream`以及它的伙伴`DataOutputStream`.这两个工具能够帮助解析那些按照预设模式组织起来的多部分消息体,并且提供了一系列便捷的方法去获取其中各个组成部分的具体值[例如整数、浮点数等]. 此外还存在特殊用途的对象串行化接口`ObjectInputStream` / ` ObjectOutputStream`,可用于持久化整个复杂对象图谱至永久储存空间内以便日后恢复重建使用状态完全一致的新实例副本[^3].
```java
// 示例代码展示如何反序列化一个包含不同类型成员变量的对象
String filePath = "d:\\IOTest\\data.dat";
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath))) {
System.out.println(ois.readInt());
System.out.println(ois.readBoolean());
System.out.println(ois.readChar());
System.out.println(ois.readDouble());
System.out.println(ois.readUTF());
Object dog = ois.readObject();
System.out.println("运行类型为:" + dog.getClass().getName());
System.out.println(dog);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
```
阅读全文