我必须使用具有.b扩展名的文件。实际上,这个文件包含使用Caffe框架从fc7层提取的深层CNN图像特征。每一行由ASIN(亚马逊标准识别码)组成,后跟4076个视觉特征(每个特征由十进制数表示)。但是,当我试图读取该文件时,文件的输出格式如下: - “B000IG9NS6Œ¹?{^ @Ã9c?ÓÞÀÞÀ?>?{?jM”,并继续如此。在java中如何读取.b扩展名的文件?
难道你们中的任何人都请让我知道如何通过阅读这种文件来获得正确的输出?
我必须使用具有.b扩展名的文件。实际上,这个文件包含使用Caffe框架从fc7层提取的深层CNN图像特征。每一行由ASIN(亚马逊标准识别码)组成,后跟4076个视觉特征(每个特征由十进制数表示)。但是,当我试图读取该文件时,文件的输出格式如下: - “B000IG9NS6Œ¹?{^ @Ã9c?ÓÞÀÞÀ?>?{?jM”,并继续如此。在java中如何读取.b扩展名的文件?
难道你们中的任何人都请让我知道如何通过阅读这种文件来获得正确的输出?
不管它是一个二进制或文本文件,哪些文件扩展名有,你可以阅读文件的字节方式如下:
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问题。
你正在读它的字节,实际上我认为java不关心文件扩展名,因为所有文件都只是字节,你应该使用正确的解码来以你想要的方式读取想要的文件 –
@DmytroGrynets我正要写点东西例如:“重命名扩展名为'.foo'。用'.foo'扩展名读取文件很简单”。但更严重的是:你是对的。人们必须知道格式。 (这些问题听起来有点像提问者试图使用一些'Reader'来读取文件,它将数据解码为'String',但这还不清楚) – Marco13
@ Marco13和DmytroGrunets感谢您的写作!我仍然无法获得正确的输出结果。这是指向该文件的链接:[link](https://drive.google.com/open?id=0B7NS7h2Y8UesM0VBdnVoUEFQYnc) – Leo