Deekor
Deekor

Reputation: 9499

java printstream image file

Is a printstream appropriate for sending image files through a socket? I'm currently doing a homework assignment where I have to write a web proxy from scratch using basic sockets.

When I configure firefox to use my proxy everything works fine except images don't download. If I go to an image file directly firefox comes back with the error: The image cannot be displayed because it contains errors

Here is my code for sending the response from the server back to the client (firefox):

        BufferedReader serverResponse =  new BufferedReader(new InputStreamReader(webServer.getInputStream()));
        String responseLine;
        while((responseLine = serverResponse.readLine()) != null)
        {
            serverOutput.println(responseLine);
        }

In the code above serverOutput is a PrintStream object. I am wondering if somehow the PrintStream is corrupting the data?

Upvotes: 0

Views: 491

Answers (1)

No, it is never appropriate to treat bytes as text unless you know they are text.

Specifically, the InputStreamReader will try to decode your image (which can be treated as a byte array) to a String. Then your PrintStream will try to encode the String back to a byte array.

There is no guarantee that this will produce the original byte array. You might even get an exception, depending on what encoding Java decides to use, if some of the image bytes aren't valid encoded characters.

Upvotes: 2

Related Questions