我有一个servlet,它读取BINARY文件并将其发送给客户端。
byte[] binaryData = FileUtils.readFileToByteArray(path);
response.getWriter().print(new String(binaryData));
适用于NON BINARY文件。当我有一个BINARY文件时,我得到receive file length bigger than origin or received file not the same
。我如何阅读和发送二进制数据?
感谢。
答案 0 :(得分:8)
Writer
不。编写器用于 text 数据,而不是二进制数据。您当前的代码正在尝试使用系统默认编码将任意二进制数据解释为文本。这是一个非常糟糕的主意。
您需要输出流 - 因此请使用response.getOutputStream()
,并将二进制数据写入:
response.getOutputStream().write(FileUtils.readFileToByteArray(path));
答案 1 :(得分:4)
不要使用Writer,它会添加你的角色编码,并且不会总是有1:1的映射(正如你所经历的那样)。而是直接使用OutputStream。
如果您不需要立即阅读,请避免阅读完整内容。提供许多并行请求将很快消耗内存。 FileUtils有这方面的方法。
FileUtils.copyFile(path, response.getOutputStream());