我想将可能大文件的最后10MB复制到另一个文件中。理想情况下,我将使用fileInputStream,skip(),然后读取()。但是,我不确定Skip()的性能是否不好。 Skip()通常是使用在下面寻求的文件或实际读取和丢弃数据的?

我知道RandomAccessfile,但我对是否可以使用FileInputStream代替它感兴趣(随机访问FlyAccessfile很烦人,因为API是非标准的)。

有帮助吗?

解决方案

取决于您的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);
}

看起来正在做一个 seek(). 。但是,我不明白为什么 RandomAccessFile 是非标准的。这是 java.io 包装,自1.0起。

其他提示

你会对这个感兴趣 关联

它说寻求比跳过快

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top