Mik*_*e Q 13 java inputstream random-access seek
我想将最后10MB的可能大文件复制到另一个文件中.理想情况下,我会使用FileInputStream,skip()然后read().但是我不确定skip()的性能是否会很糟糕.skip()通常是使用下面的文件搜索实现的,还是实际读取和丢弃数据?
我知道RandomAccessFile,但我对是否可以使用FileInputStream代替它感兴趣(RandomAccessFile很烦人,因为API是非标准的).
The*_*ist 18
取决于你的JVM,但这FileInputStream.skip()是最近的openjdk 的来源:
JNIEXPORT jlong JNICALL
Java_java_io_FileInputStream_skip(JNIEnv *env, jobject this, jlong toSkip) {
jlong cur = jlong_zero;
jlong end = jlong_zero;
FD fd = GET_FD(this, fis_fd);
if (fd == -1) {
JNU_ThrowIOException (env, "Stream Closed");
return 0;
}
if ((cur = IO_Lseek(fd, (jlong)0, (jint)SEEK_CUR)) == -1) {
JNU_ThrowIOExceptionWithLastError(env, "Seek error");
} else if ((end = IO_Lseek(fd, toSkip, (jint)SEEK_CUR)) == -1) {
JNU_ThrowIOExceptionWithLastError(env, "Seek error");
}
return (end - cur);
}
Run Code Online (Sandbox Code Playgroud)
看起来它正在做一个seek().但是,我不明白为什么RandomAccessFile不标准.它是该java.io软件包的一部分,从1.0开始.
| 归档时间: |
|
| 查看次数: |
9738 次 |
| 最近记录: |