2

Javaでスパースファイルの正確な(つまり、ディスク上の実際のサイズであり、すべての0を含む通常のサイズではない)測定値を取得しようとしています。

Windows上のC++では、を使用しますGetCompressedFileSize。私はまだJavaでそれを行う方法に出くわしていませんか?

直接同等のものがない場合、すべてのゼロを含むサイズではなく、スパースファイル内のデータを測定するにはどうすればよいですか?

明確にするために、Linux OSとWindowsの両方でスパースファイル測定を実行するためにこれを探していますが、2つの別々のアプリケーションをコーディングしてもかまいません!

4

3 に答える 3

1

Windows単体でやるならJava Native Interfaceで書けばいい

class NativeInterface{
   public static native long GetCompressedFileSize(String filename);
}

および C/C++ ファイルでは:

extern "C"
JNIEXPORT jlong JNICALL Java_NativeInterface_GetCompressedFileSize
  (JNIEnv *env, jobject obj, jstring javaString)
{
    const char *nativeString = env->GetStringUTFChars(javaString, 0);
 
    char buffer[512];
    strcpy(buffer, nativeString);
    env->ReleaseStringUTFChars(javaString, nativeString);
    return (jlong) GetCompressedFileSize(buffer, NULL);
}
于 2013-02-06T17:58:00.353 に答える
0

Windows用の回答があったので。私はLinux用に提供しようとします。

よくわかりませんが、うまくいくと思います(C ++):

#include <linux/fs.h>
ioctl(file, BLKGETSIZE64, &file_size_in_bytes);

これは、@Aniket の回答 (JNI) で説明されているのと同じ方法でロードできます。

于 2013-02-06T18:10:07.867 に答える