java打印流图像文件
java打印流图像文件,java,sockets,Java,Sockets,printstream是否适合通过套接字发送图像文件?我目前正在做一个家庭作业,我必须使用基本套接字从头开始编写一个web代理 当我将firefox配置为使用我的代理时,一切正常,除了不下载的图像。如果我直接转到图像文件,firefox会返回错误:图像无法显示,因为它包含错误 以下是我将响应从服务器发送回客户端(firefox)的代码: 在上面的代码中,serverOutput是一个PrintStream对象。我想知道打印流是否在某种程度上破坏了数据?不,除非您知道字节是文本,否则将字节视为文本
printstream
是否适合通过套接字发送图像文件?我目前正在做一个家庭作业,我必须使用基本套接字从头开始编写一个web代理
当我将firefox配置为使用我的代理时,一切正常,除了不下载的图像。如果我直接转到图像文件,firefox会返回错误:图像无法显示,因为它包含错误
以下是我将响应从服务器发送回客户端(firefox)的代码:
在上面的代码中,
serverOutput
是一个PrintStream
对象。我想知道打印流是否在某种程度上破坏了数据?不,除非您知道字节是文本,否则将字节视为文本是不合适的
具体来说,InputStreamReader将尝试将图像(可以视为字节数组)解码为字符串。然后,PrintStream将尝试将字符串编码回字节数组
无法保证这将生成原始字节数组。如果某些图像字节不是有效的编码字符,甚至可能会出现异常,具体取决于Java决定使用的编码方式。因此
InputStreamReader
和PrintStream
都是错误的选择?@Deekor Yes。虽然不能只使用一个,但在这种情况下,必须同时使用两个或两个都不使用。(或者OutputStreamWriter
而不是PrintStream
,后者有完全相同的问题)java中是否有用于传递字节的内置选项?还是所有的读写器都将它们解码/编码为文本?@DeekorInputStream
s和OutputStream
s是原始字节<代码>读卡器和写卡器用于文本。(这就是为什么你把字节转换成文本再转换回来很奇怪)好的,这是有道理的。感谢您的帮助。PrintStream
是一个错误的选择,不是因为字符问题,而是因为它的print()
方法包含异常。通过网络使用PrintStream
或PrintWriter
并不合适,因为您需要立即了解连接上的异常情况。
BufferedReader serverResponse = new BufferedReader(new InputStreamReader(webServer.getInputStream()));
String responseLine;
while((responseLine = serverResponse.readLine()) != null)
{
serverOutput.println(responseLine);
}