将二进制文件读入字符串

这一点显而易见,但我无法弄清楚。 我花了差不多一整天的时间。 我很乐意给那些可以照亮我的人买啤酒。

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); 

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

似乎从二进制文件中获取数据是一种真正的痛苦,我真的很沮丧。

还有一件事:文件内容不是文本,可以是图片,video或pdf。

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

如果readFully没有exception返回,则表明它读取的数据与您请求的数据一样多,应该是整个文件。 你已经设法很容易地从二进制文件中获取数据(尽管close()调用应该在finally块中) – 它只是将它转换为文本,这是一个坏主意。

正如Jon Skeet告诉你的那样(你应该总是用347k听一个人!),如果它不是文本,不要将它保存在字符串中并将其保存为字节数组。 另外,尝试commons-io并使用其辅助类。

 File file = new File(filePath); InputStream is = null; byte[] bytes = null; try{ bytes = IOUtils.toByteArray(is); }finally{ IOUtils.closeQuietly(is) }