java图片转base64和真实的结果不一样
迷茫
迷茫 2017-04-18 10:56:39
0
3
851

先上代码

        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还长了很多。

为什么会这样呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(3)
黄舟

InputStreamのavailable()で返される値は、InputStreamがブロックされることなく一度に読み込めるデータの長さです。ただし、ネットワークの状態は常に不確実であり、ブロックされることがよくあります。したがって、ループを使用して、InputStream 内のデータを読み取ることをお勧めします。

いいねを押す +0
伊谢尔伦

全体を読む方が安全です InputStream时,用Streams.copy() たとえば、質問のタイトルには次のようになります。 リーリー

いいねを押す +0
巴扎黑

リーリー

ただし、私の場合はdata:image/jpg;base64を追加するだけで大​​丈夫です

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート