客户端与服务端读取流方式区别

一、客户端因为获取不到request对象,因此只能通过conn得到流信息。

例子:

String requestUrl = "http://10.10.136.85:8080/highcharts-export-convert/MyServletEchart";

URL url = new URL(requestUrl);
HttpURLConnection  conn = (HttpURLConnection) url.openConnection();
// 设置应用程序要从网络连接读取数据
conn.setRequestMethod("POST");
conn.setDoOutput(true);

上面是获取到HttpURLConnection  对象并对其内容进行相关设置。

// 表单参数

StringBuffer params = new StringBuffer();
params.append(chartTPL);
byte[] bypes = params.toString().getBytes();

上面是对参数进行相关处理,方便后面作为流写到服务端。

conn.getOutputStream().write(bypes);// 这里可以看出,客户端是通过conn获取输出流的。 
int responseCode = conn.getResponseCode();//响应码如果是200,表示访问成功。

以上就是客户端访问服务端的过程,如果服务端还会返回流信息,则还是可以通过conn来获取,如下所示:

InputStream inputStream = null;

if (responseCode == 200) {
          // 从服务器返回一个输入流
          inputStream = conn.getInputStream();// 这里可以看出,客户端是通过conn获取输入流的。 
          log.info("inputStream="+inputStream);
 }

得到输入流之后可以进行相关处理,如写入文件:

byte[] data = new byte[1024];
      int len = 0;
      FileOutputStream fileOutputStream = null;
      try {
        fileOutputStream = new FileOutputStream(photoPath);
        while ((len = inputStream.read(data)) != -1) {//这里:由于数据都在inputStream里面,因此有这个方                                                       法:inputStream.read(data):意思是从inputStream读取1024字节。
          fileOutputStream.write(data, 0, len);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }

总结:从以上可以看出,客户端获取流的方式是通过 HttpURLConnection  对象。  

OutputStream outputStream =conn.getOutputStream();
InputStream inputStream = conn.getInputStream();

===================================================================

二、服务端由于是接收的http请求,因此可以通过HttpServletRequest对象获取用户的请求参数,然后可以通过HttpServletResponse对象对客户端进行相应。

BufferedReader reader = request.getReader();
String input = null;
StringBuffer requestBody = new StringBuffer();
while((input = reader.readLine()) != null) {
    requestBody.append(input);
}
input = requestBody.toString();//这样就得到了客户端的请求参数。

服务端相关处理这里就不做阐述了,假设已经处理好,并得到一个文件,并将文件内容作为流写到客户端:

//生成图片后将图片流写到客户端
OutputStream outputStream = response.getOutputStream();
BufferedImage br = null;
try {
    br = ImageIO.read(new File(photoPath));
    ImageIO.write(br, "png", outputStream);
} catch (IOException e) {
    e.printStackTrace();
}


你可能感兴趣的:(客户端与服务端读取流方式区别)