OutputStream 输出流,用来write写的,把数据写进入
如果是文件输出流,结果就是把数据写入文件
如果是HttpURLConnection输出流,结果就是把数据写入http发送数据
InputStream 输入流,用来read读取的,把数据读出来
如果是文件输入流,结果就是把数据从文件中读取到字节、字符数组中
如果是HttpURLConnection输入流,结果就是读取数据接收http数据
字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。
字节流通常用于处理二进制数据,不支持直接读写字符;字符流通常用于处理文本数据
在读写文件需要对文本内容进行处理:按行处理、比较特定字符的时候一般会选择字符流;仅仅读写文件,不处理内容,一般选择字节流
https://ww.cnblogs.com/liangbaolong/p/12880487.html
从目标文件或资源读取 URL u = new URL(url); UrlResource ur = new UrlResource(u); 输入读: InputStream in = ur.getInputStream(); //字节输入流 例如从url资源获取 FileInputStream in = new FileInputStream(new File("D:/test.txt")); 文件输入流(字节流) FileReader fr = new FileReader(new File("D:/test.txt")); 文件输入流(字符流) InputStreamReader isr = new InputStreamReader(in,"gbk"); 字符输入流 Reader read = new BufferedReader(isr); 字符输入流 输出写: OutputStream outStream = response.getOutputStream(); 字节输出流 例如从http响应获取 ByteArrayOutputStream bao = new ByteArrayOutputStream(); 字节输出流 FileOutputStream fos = new FileOutputStream(file); 文件输出流 (字节流) FileWriter fw = new FileWriter(new File("D:/test2.txt")); 文件输出流 (字符流) OutputStreamWriter out = new OutputStreamWriter(fos); 字符输出流 Writer wr = new BufferedWriter(out); 字符输出流 字节流: while((i=in.read(b))>=0){//从输入流读取到字节数组 i是返回的读到b的字节个数 返回-1表示已读完 bao.write(b);//字节数组写入输出流 b = new byte[1024]; } 字符流: while((c= read.read(ch))>=0){ //从输入流读取字符数组 //out.write(ch,0, c); //字符数组写入输出流 wr.write(ch); ch = new char[5]; } wr.flush(); wr.close(); 操作字符流涉及字符编码,字节流不涉及 基于字节流的stream: DataOutputStream----DataInputStream: FileOutputStream-----FileInputStream: 基于字符流的stream(典型的以write和reader来标识的): FileWriter---FileReader: StringWriter---StringReader: BufferedWriter--BufferedReader
https服务器搭建
https://pay.weixin.qq.com/wiki/doc/api/wxpay_v2/papay/chapter2_7.shtml
public static void main(String[] args) { //传入null请求接收方会报错 String s1 = httpReq("http://localhost:9098/insurance/insuranceAward/insuranceSport2.json?userId=123&policyNo=321","123xxxxxxmmmmmmm"); System.out.println("result:"+s1); } @RequestMapping(value = "/insuranceSport2") @ResponseBody public ResultVO<String> test2(@Valid MyRequest request, HttpServletRequest req, HttpServletResponse res,@RequestBody String jsonString) { ResultVO rs = new ResultVO(); System.out.println(request); System.out.println(jsonString); return rs; } public static String httpReq(String url, String params) { StringBuffer bufferRes = new StringBuffer(); HttpURLConnection conn = null; InputStream in = null; try { URL realUrl = new URL(url); conn = (HttpURLConnection) realUrl .openConnection(); // 连接超时 conn.setConnectTimeout(30000); // 读取超时 --服务器响应比较慢,增大时间 conn.setReadTimeout(30000); HttpURLConnection.setFollowRedirects(true); // 请求方式 conn.setRequestMethod("GET"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); if (StringUtils.isNotBlank(params)) { conn.setRequestProperty("CONTENT_LENGTH","" + params.length()); } // conn.setRequestProperty("Accept-Charset", "UTF-8"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"); conn.setRequestProperty("Referer", "https://api.weixin.qq.com/"); // 发送请求参数 if (params != null) { OutputStream out = conn.getOutputStream(); out.write(params.getBytes("UTF-8")); out.flush(); out.close(); out = null; } //接收返回 public static void main(String[] args) { //传入null请求接收方会报错 String s1 = httpReq("http://localhost:9098/insurance/insuranceAward/insuranceSport2.json?userId=123&policyNo=321","123xxxxxxmmmmmmm"); System.out.println("result:"+s1); } @RequestMapping(value = "/insuranceSport2") @ResponseBody public ResultVO<String> test2(@Valid MyRequest request, HttpServletRequest req, HttpServletResponse res,@RequestBody String jsonString) { ResultVO rs = new ResultVO(); System.out.println(request); System.out.println(jsonString); return rs; } public static String httpReq(String url, String params) { StringBuffer bufferRes = new StringBuffer(); HttpURLConnection conn = null; InputStream in = null; try { URL realUrl = new URL(url); conn = (HttpURLConnection) realUrl .openConnection(); // 连接超时 conn.setConnectTimeout(30000); // 读取超时 --服务器响应比较慢,增大时间 conn.setReadTimeout(30000); HttpURLConnection.setFollowRedirects(true); // 请求方式 conn.setRequestMethod("GET"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); if (StringUtils.isNotBlank(params)) { conn.setRequestProperty("CONTENT_LENGTH","" + params.length()); } // conn.setRequestProperty("Accept-Charset", "UTF-8"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"); conn.setRequestProperty("Referer", "https://api.weixin.qq.com/"); // 发送请求参数 if (params != null) { OutputStream out = conn.getOutputStream(); out.write(params.getBytes("UTF-8")); out.flush(); out.close(); out = null; } //接收返回 in = conn.getInputStream(); BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8")); String valueString = null; while ((valueString = read.readLine()) != null) { bufferRes.append(valueString); } in.close(); read.close(); in = null; read = null; if (conn != null) { conn.disconnect(); } } catch (Exception e) { LOGGER.error("http请求微信服务异常", e); } finally{ conn = null; in = null; } return bufferRes.toString(); } in = conn.getInputStream(); BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8")); String valueString = null; while ((valueString = read.readLine()) != null) { bufferRes.append(valueString); } in.close(); read.close(); in = null; read = null; if (conn != null) { conn.disconnect(); } } catch (Exception e) { LOGGER.error("http请求微信服务异常", e); } finally{ conn = null; in = null; } return bufferRes.toString(); }
// https public static String httpRequest(String requestUrl, String outputStr) { StringBuffer buffer = new StringBuffer(); try { TrustManager[] tm = { new TrustAnyTrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection httpUrlConn = (HttpsURLConnection) url .openConnection(); httpUrlConn.setSSLSocketFactory(ssf); httpUrlConn.setDoOutput(true); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // 设置请求方式(GET/POST) httpUrlConn.setRequestMethod("POST"); if (null != outputStr) { OutputStream outputStream = httpUrlConn.getOutputStream(); // 注意编码格式,防止中文乱码 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 将返回的输入流转换成字符串 InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "UTF-8"); BufferedReader bufferedReader = new BufferedReader( inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // 释放资源 inputStream.close(); inputStream = null; httpUrlConn.disconnect(); return buffer.toString(); } catch (Exception e) { LOGGER.error("WeixinHttpUtil-->httpRequest error"+e.getMessage(),e); } return ""; }