新手到android - 了解在Web服务调用中使用OutputStreamWriter

时间:2014-03-05 15:14:07

标签: java android web-services

我一直在查看following tutorial并遇到了这段代码,我不明白其目的:

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

我不知道上面代码的目的是什么,以及它将这些数据写入...

从我可以收集的内容来看,文档声明它将字符转换为字节......但是它会将其写入某些地方......不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

它将它写入URLConnection的输出流 - 它基本上用于HTTP请求的主体(当然,假设它是一个HTTP URL)。

答案 1 :(得分:1)

它主要用于将字符流转换为字节流。

字节流和字符流与链接不兼容,因为第一个操作的是8位ASCII字符,另一个操作是16位Unicode字符。要显式链接它们,java.io包中存在两个类InputStreamReaderOutputStreamWriter

InputStreamReader将字节流与字符流BufferedReader(在阅读端)链接。

对于OutputStreamWriter,2字节的字符被编码(转换)为1字节的字节(InputStreamReader以其他方式 - 字节到字符)。

对于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();
  

它将所需信息写入输出流并关闭   流。写入客户端输出流的数据是   服务器端的输入。