2017-02-15 89 views
-2

我必須使用具有.b擴展名的文件。實際上,這個文件包含使用Caffe框架從fc7層提取的深層CNN圖像特徵。每一行由ASIN(亞馬遜標準識別碼)組成,後跟4076個視覺特徵(每個特徵由十進制數表示)。但是,當我試圖讀取該文件時,文件的輸出格式如下: - 「B000IG9NS6Œ¹?{^ @Ã9c?ÓÞÀÞÀ?>?{?jM」,並繼續如此。在java中如何讀取.b擴展名的文件?

難道你們中的任何人都請讓我知道如何通過閱讀這種文件來獲得正確的輸出?

+3

你正在讀它的字節,實際上我認爲java不關心文件擴展名,因爲所有文件都只是字節,你應該使用正確的解碼來以你想要的方式讀取想要的文件 –

+0

@DmytroGrynets我正要寫點東西例如:「重命名擴展名爲'.foo'。用'.foo'擴展名讀取文件很簡單」。但更嚴重的是:你是對的。人們必須知道格式。 (這些問題聽起來有點像提問者試圖使用一些'Reader'來讀取文件,它將數據解碼爲'String',但這還不清楚) – Marco13

+0

@ Marco13和DmytroGrunets感謝您的寫作!我仍然無法獲得正確的輸出結果。這是指向該文件的鏈接:[link](https://drive.google.com/open?id=0B7NS7h2Y8UesM0VBdnVoUEFQYnc) – Leo

回答

0

不管它是一個二進制或文本文件,哪些文件擴展名有,你可以閱讀文件的字節方式如下:

import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.nio.file.Path; 

Path path = Paths.get("path/to/file/file.b"); 
byte[] data = Files.readAllBytes(path); 

更新

OP越來越嘗試上述解決方案後出現內存不足錯誤。從@ Marco13的評論到這個問題,看起來你的二進制文件大小爲600 Mb。這可能是你獲得OOME的原因。但是這個錯誤與你如何在java中讀取二進制文件的原始問題無關。您可以使用JVM標誌-XX:MaxDirectMemorySize=<size>Direct Memory指定更高的內存大小。這裏指定一個大約700 MB的更安全的一面。這將解決你的其他OOME問題。

+0

感謝您的寫作!它也沒有使用這種方法。這是指向該文件的鏈接:[link](https://drive.google.com/open?id=0B7NS7h2Y8UesM0VBdnVoUEFQYnc)。如果你有時間,請告訴我,如果你能看到方便的輸出。最好! – Leo

+0

@Leo,出於安全原因,我無法下載該文件。但是,你能告訴我們什麼不適用於我提議的解決方案。我在本地用另一個二進制文件(一個PDF文件)嘗試了它。它工作得很好。你有什麼錯誤嗎? – VHS

+0

我收到以下內容:線程「main」中的異常java.lang.OutOfMemoryError:Java堆空間... – Leo

相關問題