当前位置: 首页 > 面试题库 >

将二进制文件读入字符串

奚瑾瑜
2023-03-14
问题内容

这一定很明显,但我无法弄清楚。我为此花了将近一整天。我很乐意给减轻我体重的人买啤酒。

File file = new File(filePath);
byte[] bytes = new byte[(int)file.length()];
DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
dataInputStream.readFully(bytes);           
dataInputStream.close();            
return new String(bytes);

这是我的代码。我看到字节数组大小不合适,但是我找不到正确的大小。除此之外,内容也不是不正确的。似乎只有文字字符可以。

似乎从二进制文件中删除数据确实很痛苦,我真的很沮丧。

还有一件事:文件内容不是文本,可以是图片,视频或pdf之类的东西。


问题答案:

如果你正在读一个二进制文件,你应该 尝试把它当作好像它编码的文本。将其转换为这样的字符串是不合适的-您应该将其保留为字节数组。如果 确实
需要它作为文本,则应使用base64或hex表示二进制数据-其他方法可能会丢失数据

如果readFully无例外地返回,则表明它已读取您请求的尽可能多的数据,应为整个文件。您已经设法轻松地从二进制文件中获取数据(尽管close()调用应该在finally块中)-只是将其转换为文本是个坏主意。



 类似资料:
  • 问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节

  • 我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 问题内容: 我想读Python中的大文件时,了解在这个方法内存使用率的差异。 第1版,发现这里的计算器: 版本2,我用在此之前,我发现上面的代码: 该文件在两个版本部分阅读。而目前的一块可以被处理。在第二个例子,是在每个周期中获得新的内容,所以我认为这将做的工作,以 不 完整的文件加载到内存..? 但我真的不明白是什么呢,我敢肯定我得到的东西错在这里。任何人都可以解释给我吗? 还有别的,我感到困惑

  • 问题内容: 我有一些从Go程序中读取的文本文件。我想提供一个可执行文件,而无需另外提供该文本文件。如何将其嵌入Windows和Linux上的编译中? 问题答案: 使用go-bindata。从自述文件: 该工具可将任何文件转换为可管理的Go源代码。对于将二进制数据嵌入到go程序中很有用。在转换为原始字节片之前,可以选择对文件数据进行gzip压缩。

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示: