java I/O 体系总结二
前言
继续说java的I/O体系,主要补充下上文没有提到的知识点或类。
java有关io的类在java.io包中。主要有以下几个部分。
- java i/o流部分(也是IO的主体部分)
- io辅助类,如File、RandomAccessFile或FileDescriptor,Closeable及Flushable等。
- io异常类
io流分类
根据数据来源分类:
- File(文件):FileInputStream、FileOutputStream(文件输入输出字节流);FileWriter、FileReader(文件输出输出字符流)
- byte[]:ByteArrayInputStream、ByteArrayOutputStream
- char[]:CharArrayReader、CharArrayWriter
- String: StringBufferInputStream、StringReader、StringWriter
阻塞式IO
上面讲解的都是阻塞式I/O。
阻塞io,一般说的是, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。阻塞式io中每个连接必须要开一个线程来处理,并且没处理完线程不能退出。因此,传统阻塞式IO的瓶颈在于不能处理过多的连接。
Java IO的流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。
File
File类是IO包唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法操作文件,包括文件的创建、重命名、判断文件是否存在等。
RandomAccessFile
RandomAccessFile 根据名字我们就能知道,这是一个支持随机访问的文件类,可以跳转到文件的任意位置处读写数据。RandomAccessFile 有一个位置指示器,指向当前读写处的问题,可移动此位置到任一地方。
如果需要访问文件的部分内容,RandomAccessFile是更好的选择。
此类只支持操作文件,不能访问其他IO设备如网络、内存等。
构造方法
RandomAccessFile(File file,String mode);
模式 | 作用 |
---|---|
r | 只读 |
rw | 可读可写,文件不存在则创建 |
rws | 读写,还会对文件内容及元数据的每次更新同步到底层存储设备 |
rwd | 读写,还会对文件内容每次更新同步到底层存储设置 |