一个文件,有3段,我想每一段用一个流来读数据,这样可以同时读。已知每个段的起始位置和长度。

解决方案 »

  1.   

    我试了·,打开三个流,然后skip到段开始的位置。
    这样每一个流都是打开再skip到起始位置,我觉得skip很浪费,因为读后边的段,前边的段重复skip了。
    有没有更好的办法?
    文件在磁盘上,每段数据都挺多的。
      

  2.   

    我试了·,打开三个流,然后skip到段开始的位置。
    这样每一个流都是打开再skip到起始位置,我觉得skip很浪费,因为读后边的段,前边的段重复skip了。
    有没有更好的办法?
    文件在磁盘上,每段数据都挺多的。
    把大文件拆分成3个小文件不行吗
      

  3.   

    RandomAccessFile可以试试这个类
      

  4.   

    seek会不会有隐藏buffer?我看的资料上说seek代价很大,要慎用,它主要是哪些方面的代价呢?打开一次文件,文件上只有一个指针吧?可以设置多个指针吗?
      

  5.   

    你可以把它转化成ByteBuff来读。
    ByteBuff里面有一个slice可以分片的。
    分成三份就好了。嘿嘿
      

  6.   

    文件多大? 不大的话,一次性多读一些数据,存到buffer里面,以后再用,从buffer里面取就行了。不要用多个inputstream打开同一个文件,一般来说这没有意义,硬盘的一个盘片只有一个读写头,
    你这样只能造成读写头来回乱跑(切换磁道),而切换磁道很浪费时间。
    当然,如果是固态硬盘就没有切换磁道的问题了。