2014-03-05 40 views
2

我已經走得過following tutorial和整個這個代碼,我不明白的目的傳來:新到Android - 瞭解使用OutputStreamWriter在Web服務調用

   URLConnection conn = url.openConnection(); 
       conn.setDoOutput(true); 
       OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
       wr.write(data); 
       wr.flush(); 

我不知道是什麼是上述代碼的目的,它在哪裏寫這個數據...

從我可以收集,該文件指出,它將字符轉換爲字節...但後來它寫入一些地方..不知道這是爲什麼。

回答

1

它基本上用於將字符流轉換爲字節流。

字節流和字符流鏈接不兼容,因爲第一個字符流操作8位ASCII字符,而另一個字符流操作16位Unicode字符。爲了明確地鏈接它們,java.io包中存在兩個類,InputStreamReaderOutputStreamWriter

InputStreamReader鏈接一個字節流,字符流BufferedReader(在閱讀方)。

鑑於OutputStreamWriter,2字節的字符被編碼(轉換)爲1字節的字節(其他方式 - 字節到字符)。

對於一個Java程序與服務器端進程交互,它只需要能夠寫入一個URL,從而向服務器提供數據。它可以通過以下步驟做到這一點:

1.Create a URL. 
2.Retrieve the URLConnection object. 
3.Set output capability on the URLConnection. 
4.Open a connection to the resource. 
5.Get an output stream from the connection. 
6.Write to the output stream. 
7.Close the output stream. 
在您提供的片段

現在,

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

創建連接上的輸出流,並在其上打開一個 OutputStreamWriter - 5步如果URL確實支持輸出,則 此方法返回輸出流,該輸出流連接到服務器端的URL輸入 流 - 客戶端的輸出是 服務器的輸入。如果URL不支持輸出, getOutputStream 方法拋出UnknownServiceException。

而且

wr.write(data); 
wr.close(); 
wr.flush(); 

它寫入所需的資料到輸出流並關閉 流。寫入客戶端輸出流的數據是服務器端的輸入 。

+0

什麼會被認爲是「在服務器端的輸入」在這裏? – user3134565

1

它將它寫入URLConnection的輸出流 - 它基本上用於HTTP請求的主體(當然,假設它是HTTP URL)。

+0

但我通過這段代碼看了一下,那個wr對象沒有在任何地方使用 – user3134565

+0

所以我想我的後續問題是,根據你寫的內容,爲什麼這些都很重要? – user3134565

+0

@ user3134565:它用在你顯示的代碼中:'wr.write(data)'。這爲請求的正文提供了數據。 –