>  Q&A  >  본문

java图片转base64和真实的结果不一样

先上代码

        String imgURL = "http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99";

        byte[] data = null;
        try {
            // 创建URL
            URL url = new URL(imgURL);
            // 创建链接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5 * 1000);
            InputStream inStream = conn.getInputStream();
            data = new byte[inStream.available()];
            inStream.read(data);
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        str=encoder.encode(data);

就是从一个网络读取图片并转成base64.发现转出来的结果无法用于img标签显示(已加了data:image/jpeg;base64,前缀)。
后来直接百度找了一个在线生成base64的网站,把这个图片url放上去转换,
结果发现别人在线转换出来的base64比我java代码转换的base64还长了很多。

为什么会这样呢?

迷茫迷茫2763일 전817

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 10:58:39

    InputStream의 available()이 반환하는 값은 입력스트림이 차단되지 않고 한 번에 읽을 수 있는 데이터의 길이입니다. 그러나 네트워크 상태는 항상 불확실하고 종종 차단됩니다. 따라서 루프를 사용하여 InputStream의 데이터를 읽는 것이 좋습니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:58:39

    InputStream 전체를 읽을 때는 Streams.copy()을 사용하는 것이 더 안전합니다. 예를 들어 이 예에서는

    을 사용할 수 있습니다. 으아악

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:58:39

    으아악

    단, 제 경우에는 data:image/jpg;base64만 추가하면 괜찮습니다

    회신하다
    0
  • 취소회신하다