java文件随机读写

随机读写是相对顺序读写而言的,所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。假设存在一个文件尺寸为1024个字节的文件,如果按照顺序存取原则的话,我们只能采用类似于FileStream.read()或者FileReader.readLine()的方式来一段一段,或者一行一行地读取,在多数情况下,这样仿佛没有问题。但是,请考虑下面两个场景:

        数据不是整体传输,而是分块传输的:请注意,一般意义上的分块传输,数据块到达接收方(或者说被接收方接受下来)的顺序是不可预料的。一般的多线程下载软件(如网络蚂蚁),采取的做法都是启动多个线程分工抓取网络资源文件的不同分段,在此过程中,哪个数据块先被下载软件接受,那块数据后被接受,是不可预料的。

        在一个大文件中快速定位:有事,我们很明确自己想读取的内容唉整个文件中的位置,例如,在一个尺寸达到2GB的文件中读取第1024*1024个字节。

以上场景不是顺序存取所擅长的。自然,不是顺序存取完全无能为力,只是代价和效率令人难以接受。

在java中,随机读写是通过java.io.RandomAccessFile类实现的。以下代码片段以随机文件方式创建一个文件,指定其尺寸是1024kb:

private void createFile(String filePath)throws IOException
{
      File newFile=new File(filePath);
      RandomAccessFile raf=new RandomAccessFile(newFile,"rw");
      raf.setLength(1024*1024);
      raf.close();
}

RandomAccessFile类的核心价值在于RandomAccessFile.seek()方法,通过这个方法,可以任意地指定当前存取文件的指针位置。下面的代码片段实现功能:在filePath文件的finishedFileSize个字节后写入bytes字节数组中的realLength个字节的数据:

private void writeIntoFIle(String filePath,byte[] bytes,int realLength,int finishedFileSize) throws IOException
{
    File newFile=new File(filePath);
    RandomAccessFile raf=new RandomAccessFile(newFIle,"rw");
   raf.seek(finishedFileSize);
   raf.write(bytes,0,realLength);
   raf.close();
}

可以随时调用RandomAccessFile类的getFilePionter()方法,获取文件指针当前距离文件起始位置的偏移量。


 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值