一直没理解透输入输出流这块知识。今天网上查询了小半天也没有查到我想要的理解方式。
忍不了了,请教了一下公司的大神,豁然开朗。就顺便总结一下个人看法 :
就是一句话,输入或输出都是相对于本地电脑jvm的内存而言的!切记这一点就理解一半了。
例子1:发起https请求并获取结果(一般应用于公网接口)
电脑的jvm内存 --------OutputStream----------->> www.***.com服务器(发送)
电脑的jvm内存 <<--------InputputStream--------- www.***.com服务器(获取)
/**
* 发起https请求并获取结果
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
*
*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new WeiXinX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
// 当有数据需要提交时//往服务器端写内容 也就是发起https请求需要带的参数
if (null != outputStr) {
//getInputStream会使conn.connect()连接暗中被执行。所以不用写了
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串//读取服务器端返回的内容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
conn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
例子2:向硬盘中存储文件txt,并获取文件txt中的文本内容。
电脑的jvm内存 --------OutputStream----------->> 电脑的硬盘(存储)
电脑的jvm内存 <<--------InputputStream--------- 电脑的硬盘(读取)
各位现在应该明白了吧,给各位像我一样没转过来弯的小白们指条明路。
如果有写的不对的地方还请大神们指教。
本人原创,尊重个人劳动成果,我们才能互相帮助,所以转载请麻烦注明出处,有问题我也好及时修改,谢谢~