2017-02-15 78 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

相关问题