gpt4 book ai didi

java - 将 FileInputStream 转换为返回十六进制的流

转载 作者:行者123 更新时间:2023-12-04 05:05:34 25 4
gpt4 key购买 nike

我需要将二进制文件中的数据作为十六进制字符串提供。当前的实现将整个文件加载到内存中,将其转换为十六进制字符串,并将十六进制字符串作为字节数组提供给另一个组件。

我现在面临的问题是这个文件有时非常大,所以我得到“OutOfMemoryException”。该组件还接受 InputStream 作为输入,所以我想我会将 FileInputStream 包装到另一个流中,该流将文件作为十六进制字符串返回。

但是我不确定如何做到这一点,虽然子类 InputStream 看起来很简单,但我可以看到这对于不同的读取方法和特殊情况非常容易出错。如果这个轮子已经存在并且我不必重新发明它,那也很好。

建议?

最佳答案

这是基本思路

class HexInputStream extends FilterInputStream {

HexInputStream(InputStream in) {
super(in);
}

@Override
public int read(byte[] buff, int off, int len) throws IOException {
int b = super.read();
String hex = String.format("%02x", b);
buff[0 + off] = (byte)hex.charAt(0);
buff[1 + off] = (byte)hex.charAt(1);
return 2;
}
}

我们创建一个 InputStream
InputStream is = new BufferedInputStream(new HexInputStream(new FileInputStream("1.test")));

并将其传递给组件。在 is.read 上,我们总是读取 1 个字节并将其转换为 2 个十六进制字符。

使这个想法真正起作用需要一些努力。

关于java - 将 FileInputStream 转换为返回十六进制的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com