复制 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;
        }
    }

 

posted @ 2021-03-08 17:59  database-  阅读(414)  评论(0编辑  收藏  举报