字节缓冲流
字节缓冲流分为输入、输出缓冲流。
其中输入缓冲流为BufferedInputStream,从源头到内存读取数据的过程中,不会逐个读取,先将读取到的字节放在缓冲区,通过缓冲区将字节读入到内存,这样可以减少I/O次数,提高读写效率。在定义时,方法如下:BufferedInputStream buffer = new BufferedInputStream(inputStream),其中inputStream为InputStream输入流。
类似地,输入缓冲流为BufferedOutputStream,其原理和上述输入缓冲流类似,先将要写入的字节存放在缓存区,并从内部缓冲区中单独写入字节,定义方法为BufferedOutputStream buffer = new BufferedOutputStream(outputStream),其中outputStream为OutputStream输入流。
打印流
PrintStream为字节打印流(是OutputStream的子类),PrintWriter为字符打印流(是Writer的子类),对于System.out.print("aa"),其中System.out是获取PrintStream对象,print方法调用的是PrintStream对象的write方法。
随机访问流
随机访问流指的是支持随意跳转到文件的任意位置进行读写的RandomAccessFile,随机访问流有以下4种模式:
1、r:只读模式;
2、rw:只写模式;
3、rws:相对于rw,rws模式同步更新对“文件的内容”或“元数据”的修改到外部存储设备,其中元数据是用例描述文件的信息;
4、rwd:相对于rw,rwd同步更新对“文件的内容”的修改到外部存储设备。
RandomAccessFile中有一个文件指针用来表示下一个将要被写入或者读取的字节所处的位置。我们可以通过RandomAccessFile的seek(long pos)方法来设置文件指针的偏移量(距文件开头pos个字节处),如果想要获取文件指针当前的位置,可以使用getFilePointer方法。
RandomAccessFile的一个常见应用场景为断点续传,断点续传指的是在文件传输过程中,若上传失败,再次上传时不需要重传,只需要从上次上传失败的位置继续上传未上传的内容,断点续传需要文件进行分片。