Java IO学习总结笔记

时间:2023-02-24 12:34:11

Java的 IO 大致可以分成
      (1)对字节流的输入输出,
      (2)对字符流的输入输出。
InputStream和OutputStream主要用于字节流byte的输入输出,二进制文件。
Reader 和 Writer 主要用于字符流的输入输出,文本文件。
流与Reader和Writer在结束使用的时候,需要正确地关闭它们。通过调用close()方法可以达到这一点。InputStream的关闭代码放到了finally块中,无论在try-catch块中发生了什么,finally内的代码始终会被执行,所以这个InputStream总是会被关闭。
Java IO中也就基本流,文件流和缓冲流,其他的都不常用。重点关注 基本流,文件流和缓冲流。
如下表格
具体类型: 基本流,管道流,文件流, 缓冲—对于每一种类型,字节流和字符流都有对应实现
Java IO学习总结笔记
Java IO学习总结笔记
Java IO学习总结笔记
Java IO学习总结笔记

易混淆点
RandomAccessFile 真的可以在随机位置进行读写操作吗?
RandomAccessFile对文件进行随机存取。随机存取并不意味着你可以在真正随机的位置进行读写操作,它只是意味着你可以跳过文件中某些部分进行操作,
并且支持同时读写,不要求特定的存取顺序。这使得RandomAccessFile可以覆盖一个文件的某些部分、或者追加内容到它的末尾、或者删除它的某些内容,
当然它也可以从文件的任何位置开始读取文件。

Java IO中的管道能为不同JVM中的线程提供通信吗?
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。
你不能利用管道与不同的JVM中的线程通信(不同的进程)。在概念上,Java的管道不同于Unix/Linux系统中的管道。在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。在Java中,通信的双方应该是运行在同一进程中的不同线程。

两个相关联的管道流能分配给同一个线程吗?
当使用两个相关联的管道流时,务必将它们分配给不同的线程。read()方法和write()方法调用时会导致流阻塞,
这意味着如果你尝试在一个线程中同时进行读和写,可能会导致线程死锁。