RandomAccessFile
RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分。
读写文件
1 | //打开文件 |
来回读写
在RandomAccessFile的某个位置读写之前,必须把文件指针指向该位置。通过seek()方法可以达到这一目标。可以通过调用getFilePointer()获得当前文件指针的位置
1 | RandomAccessFile file = new RandomAccessFile(filePath, "rw"); |
分散和聚集
分散(scatter)是指从通道中读取的数据写入到多个buffer中;聚集是指将多个buffer中的数据写入同一个通道中。
1 | ByteBuffer header = ByteBuffer.allocate(128); |
从channel中读取数据时,会按顺序先写满一个buffer后,在写到后面的buffer中,因此这种情况不适合数据长度不定的情况。写数据时,也会按buffer顺序依次把数据写入到channel中。
通道数据传输
两个通道中有一个是FileChannel,就可以直接将数据从一个通道传输到另外一个通道。
Channel的transferFrom()方法可以将数据从源通道传输到FileChannel中
1 | RandomAccessFile fromFile = new RandomAccessFile(fileFrom, "rw"); |
如果fromchannel是socketchannels时,传输时只会将已经有的数据进行传输。
transferTo()方法将数据从FileChannel传输到其他的channel中。
1 | ... |