Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java打印流图像文件_Java_Sockets - Fatal编程技术网

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中是否有用于传递字节的内置选项?还是所有的读写器都将它们解码/编码为文本?@Deekor
InputStream
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);
        }