将二进制文件读入字符串

时间:2011-09-19 19:31:40

标签: java android file stream io

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

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。

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:0)

正如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)
}