2 回答
TA贡献1820条经验 获得超2个赞
快速帮助看起来像这样
static String toHex(File file) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(file));
int value = 0;
StringBuilder hex = new StringBuilder();
while ((value = inputStream.read()) != -1) {
hex.append(String.format("%02X ", value));
}
return hex.toString();
}
为了简单起见,我跳过了一些边缘情况。但我认为这是一个好的开始。实际上,您必须检查字符是否可转换为十六进制并处理所有可能引发的异常。
main 方法看起来像这样。
public static void main(String[] args) throws IOException {
File file = new File("sample.pdf");
String hex = toHex(file);
System.out.println(hex);
}
TA贡献1875条经验 获得超3个赞
一个很好的用例ByteBuffer(尽管byte[]在这里就足够了):
byte[] toHex(Path path) {
byte[] content = Files.readAllBytes(path);
ByteBuffer buf = ByteBuffer.allocate(content.length * 2);
for (byte b : content) {
byte[] cc = String.format("%02x", 0xFF & b).getBytes(StandardCharsets.US_ASCII);
buf.put(cc);
}
return buf.array();
}
速度提升:
for (byte b : content) {
int c = (b >> 4) & 0xF;
int d = b & 0xF;
buf.put((byte) (c < 10 ? '0' + c : 'a' + c - 10));
buf.put((byte) (d < 10 ? '0' + d : 'a' + d - 10));
}
这假设文件不大。(但在这种情况下,十六进制就没有意义。)
添加回答
举报