【发布时间】:2014-11-19 20:47:57
【问题描述】:
有人可以帮助我了解如何在 java 中使用下面的代码在 ruby 中进行操作。
下面的 ruby 代码使用 unpack('H*')[0] 将完整的二进制文件内容存储在 ASCII 格式的变量“var”中。
IO.foreach(ARGV[0]){ |l|
var = l.unpack('H*')[0]
} if File.exists?(ARGV[0])
更新: 嗨,阿鲁。我已经测试了你在下面表格中所说的方式
byte[] bytes = Files.readAllBytes(testFile.toPath());
str = new String(bytes,StandardCharsets.UTF_8);
System.out.println(str);
但是当我打印变量“str”的内容时,打印输出只显示小方块,就像没有解码内容一样。我想将二进制文件的内容以 ASCII 格式存储在“str”中。
更新 #2: 您好 Aru,我正在尝试将所有二进制文件的内容存储在字节数组中,但我不知道该怎么做。有效 使用“FileUtils.readFileToByteArray(myFile);”但这是一个外部库,有内置选项吗?
File myFile = new File("./Binaryfile");
byte[] binary = FileUtils.readFileToByteArray(myFile); //I have issues here to store in array of bytes all binary content
String hexString = DatatypeConverter.printHexBinary(binary);
System.out.println(hexString);
更新 #3:
您好 ursa 和 Aru,感谢您的帮助。我已经尝试了您的两种解决方案并且效果很好,但是看到 Files.readAllBytes() 文档 它说这不是为了处理大文件,我要分析的二进制文件超过 2GB :(。我看到你的解决方案的一个选项,阅读 一块一块地。二进制文件中的块由序列 FF65 分隔,所以有没有办法调整你的代码以只处理一个块 基于块分隔符的时间?如果没有,也许有一些外部库。
更新 #4: 您好,我正在尝试修改您的代码,因为我想根据以下内容读取可变大小的块 “Var”的值。
如何设置偏移量以读取代码中的下一个块?
我的意思是, - 在第一次迭代中读取第一个 1024, - 在这一步 Var=500 - 在 2d 迭代中读取接下来的 1024 个字节,从 1024 开始 - Var = 1024-500 = 524 - 在这一步 Var=712 - 在第 3 次迭代中读取接下来的 1024 个字节,从 1548 开始 - Var = 1548-712 = 836 - 等等
是否有类似 read(number of bytes, offset) 之类的方法?
【问题讨论】:
-
Files.readAllBytes()从文件中读取所有字节。这是你要找的吗? -
嗨,阿鲁。感谢您的回答,但无法正常工作。请在原始问题中查看我的更新。谢谢
-
我确实在我的帖子中添加了另一个示例,说明如何仅从文件中读取一定数量的字节。