复制 inputStream流
一个 inputStream 需要进行多次操作
业务实现
/** * 根据地址获得数据的字节流 并获取长度与宽度 * @param strUrl 网络连接地址 * @return */ public static Map<String, Object> getImageFromNetByUrl1(String strUrl){ try { URL url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000);//设置连接超时 InputStream inStream = conn.getInputStream();//通过输入流获取图片数据 //由于inputstream 流不能进行二次操作 ByteArrayOutputStream baos = cloneInputStream(inStream); InputStream stream1 = new ByteArrayInputStream(baos.toByteArray()); InputStream stream2 = new ByteArrayInputStream(baos.toByteArray()); byte[] btImg = readInputStream(stream1);//得到图片的二进制数据 Map<String, Object> Map = new HashMap<String, Object>(); BufferedImage image = ImageIO.read(stream2);//获取图片长宽 int height = image.getHeight(); int width = image.getWidth(); Map.put("btImg",btImg); Map.put("height",height); Map.put("width",width); return Map; } catch (Exception e) { e.printStackTrace(); } return null; }
转换工具
private static ByteArrayOutputStream cloneInputStream(InputStream input) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = input.read(buffer)) > -1) { baos.write(buffer, 0, len); } baos.flush(); return baos; } catch (IOException e) { e.printStackTrace(); return null; } }