将二进制文件读入字符串

San*_*dor 5 java io android file stream

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

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);
Run Code Online (Sandbox Code Playgroud)

这是我的代码.我看到字节数组大小不正常,但我无法弄清楚正确的大小.除此之外,内容也不正确.似乎只有文字字符才行.

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

还有一件事:文件内容不是文本,可以是图片,视频或pdf.

Jon*_*eet 11

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

如果readFully没有异常返回,则表明它读取的数据与您请求的数据一样多,应该是整个文件.你已经设法从二进制文件中轻松获取数据(虽然close()调用应该在finally块中) - 它只是将它转换为文本,这是一个坏主意.