通常のPDFファイルのバイトをJavaの「読み取り」機能を使用してバイト配列に読み込もうとすると、バイト配列は元のPDFファイルと同じサイズで正しく読み込まれます。Javaの圧縮PDFファイルからバイトを読み取る
Path file_path = Paths.get("D:\\Zip Test Client", "vadClient1.pdf");
byte[] ByteArray= Files.readAllBytes(file_path);
FileOutputStream fos = new FileOutputStream(new File("E:\\newFinalPDF.pdf"));
しかし、私はzip形式のフォルダ内に同じPDFファイルからバイトを読んだとき、読み取り機能のみが8843バイトを読み込み、(元のサイズが194471である)と、すべてが0
zipFile = new ZipFile(new File("D:\\Zip test Server\\ZipTestFolderOnServer.zip"));
long count = zipFile.size();
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while(entries.hasMoreElements()){
System.out.println("New File starting");
ZipEntry zipEntry = entries.nextElement();
System.out.println(zipEntry.getName());
InputStream fis = zipFile.getInputStream(zipEntry);
byte[] fileToBytes = new byte[(int)zipEntry.getSize()];
FileOutputStream fos = new FileOutputStream(new File("E:\\ContentZipped_" + zipEntry.getName()));
fis.read(fileToBytes);
fos.write(fileToBytes);
fis.close();
Thread.sleep(1000);
--count;
}
何で休みますこの行動の説明ですか?
編集1: - 私はTikaやPOIなどのサードパーティの統合を探していません。
これらのテストファイルは、どのようにPDFとなるのでしょうか? – usr2564301
あなたは 'InputStream.read'を呼び出して戻り値を無視しています。あなたは' read'への一回の呼び出しですべてのデータを読むことができると思われます。それは悪い仮定です。 –
@RadLexus .png、.xml、.doc、.txtは同じzipフォルダにあり、すべて正常な動作をしています。 –