在以前的一个项目中用到过 流 的操作,今天大致总结一下。
与客户方的数据传输其实可以分成几个步骤:
1.封装报文
2.准备链接(包括换取ip,端口,协议,timeout) http和https还需要请求的url 以及httphead
3.发送报文(判断是否要对所做的操作校验)
4.解析返回的报文信息,根据信息修改本次执行的状态
其中简单的4个步骤中,在第二步和第三步中在可以抽象出一个公用的方法,在项目中经过分析发现,http流,https流以及tcp流之间有很大的共通性:
private void prepareConnection() throws Exception {
// 创建连接工厂
ConnectionFactory factory = getConnectionFactory();
// 设置连接属性
setConnectionProperty(factory);
// 构造连接
conn = getConnection(factory);
// 打开连接
openConnection(conn);
// 获取输出流
os = getOutputStream(conn);
}
在创建连接工厂中,可以根据具体的渠道把请求机器的IP、超时设置初始化返回factory对象,这一步http,https,tcp都是通用的;
在设置连接设置中,若有渠道对连接有特殊的操作,比如需要渠道自己校验的key值等;
在构造连接中,根据http,https,tcp创建对应的connection.(后面在详细介绍);
在获取输出流中,直接返回OutputStream 的输出流。
在接下来就是进行交互了:
// 发送报文
send(os, requestStr);
// 关闭输出流
closeOutputStreamQuietly(os);
// 获取输入流
InputStream is = getInputStream(conn);
// 接收报文
String responseStr = recv(is);
// 关闭输入流
closeInputStreamQuietly(is);
//返回报文
return responseStr;
后面基本上一目了然了,对返回的报文进行解析,根据解析的结果修改本次操作的状态。
后续有空会继续补充!尽量编写细致。