一个文件可不可以开多个InputStream?

时间:2021-08-02 23:13:35
一个文件,有3段,我想每一段用一个流来读数据,这样可以同时读。已知每个段的起始位置和长度。

8 个解决方案

#1


你自己试试不就知道了

#2


显然是可以的,在访问文件速度极快的情况下,这样做并没有太大的优势

#3


引用 1 楼 laogao598599 的回复:
你自己试试不就知道了



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

#4


引用 3 楼 yue0608 的回复:
Quote: 引用 1 楼 laogao598599 的回复:

你自己试试不就知道了



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

把大文件拆分成3个小文件不行吗

#5


RandomAccessFile可以试试这个类

#6


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

#7


你可以把它转化成ByteBuff来读。
ByteBuff里面有一个slice可以分片的。
分成三份就好了。嘿嘿 一个文件可不可以开多个InputStream?

#8


文件多大? 不大的话,一次性多读一些数据,存到buffer里面,以后再用,从buffer里面取就行了。

不要用多个inputstream打开同一个文件,一般来说这没有意义,硬盘的一个盘片只有一个读写头,
你这样只能造成读写头来回乱跑(切换磁道),而切换磁道很浪费时间。
当然,如果是固态硬盘就没有切换磁道的问题了。

#1


你自己试试不就知道了

#2


显然是可以的,在访问文件速度极快的情况下,这样做并没有太大的优势

#3


引用 1 楼 laogao598599 的回复:
你自己试试不就知道了



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

#4


引用 3 楼 yue0608 的回复:
Quote: 引用 1 楼 laogao598599 的回复:

你自己试试不就知道了



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

把大文件拆分成3个小文件不行吗

#5


RandomAccessFile可以试试这个类

#6


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

#7


你可以把它转化成ByteBuff来读。
ByteBuff里面有一个slice可以分片的。
分成三份就好了。嘿嘿 一个文件可不可以开多个InputStream?

#8


文件多大? 不大的话,一次性多读一些数据,存到buffer里面,以后再用,从buffer里面取就行了。

不要用多个inputstream打开同一个文件,一般来说这没有意义,硬盘的一个盘片只有一个读写头,
你这样只能造成读写头来回乱跑(切换磁道),而切换磁道很浪费时间。
当然,如果是固态硬盘就没有切换磁道的问题了。