Pourquoi devez-vous appeler URLConnection#getInputStream pour être en mesure d'écrire dans URLConnection#getOutputStream?

Je suis en train d'écrire à URLConnection#getOutputStream, cependant, aucune donnée n'est en fait envoyée jusqu'à ce que j'appelle URLConnection#getInputStream. Même si j'ai mis URLConnnection#doInput à false, il n'est toujours pas en envoyer. Personne ne sait pourquoi il en est? Il n'y a rien dans la documentation de l'API qui décrit cette.

Java Documentation de l'API sur URLConnection: http://download.oracle.com/javase/6/docs/api/java/net/URLConnection.html

De Java Tutoriel sur la Lecture et l'Écriture sur un URLConnection: http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

public class UrlConnectionTest {

    private static final String TEST_URL = "http://localhost:3000/test/hitme";

    public static void main(String[] args) throws IOException  {

        URLConnection urlCon = null;
        URL url = null;
        OutputStreamWriter osw = null;

        try {
            url = new URL(TEST_URL);
            urlCon = url.openConnection();
            urlCon.setDoOutput(true);
            urlCon.setRequestProperty("Content-Type", "text/plain");            

            ////////////////////////////////////////
            //SETTING THIS TO FALSE DOES NOTHING //
            ////////////////////////////////////////
            //urlCon.setDoInput(false);

            osw = new OutputStreamWriter(urlCon.getOutputStream());
            osw.write("HELLO WORLD");
            osw.flush();

            /////////////////////////////////////////////////
            //MUST CALL THIS OTHERWISE WILL NOT WRITE OUT //
            /////////////////////////////////////////////////
            urlCon.getInputStream();

            /////////////////////////////////////////////////////////////////////////////////////////////////////////
            //If getInputStream is called while doInput=false, the following exception is thrown:                 //
            //java.net.ProtocolException: Cannot read from URLConnection if doInput=false (call setDoInput(true)) //
            /////////////////////////////////////////////////////////////////////////////////////////////////////////

        } catch (Exception e) {
            e.printStackTrace();                
        } finally {
            if (osw != null) {
                osw.close();
            }
        }

    }

}
InformationsquelleAutor John | 2011-01-30