先上代码
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还长了很多。
为什么会这样呢?
La valeur renvoyée par available() de InputStream est la longueur des données qui peuvent être lues en une seule fois par InputStream sans être bloquées. Cependant, les conditions du réseau sont toujours incertaines et souvent bloquées. Par conséquent, il est recommandé d’utiliser une boucle pour lire les données dans InputStream.
Lors de la lecture de l'intégralité de
.InputStream
, il est plus sûr d'utiliserStreams.copy()
Par exemple, dans cet exemple, cela peut être :Cependant, le code de l'affiche peut être utilisé dans mon cas, ajoutez simplement data:image/jpg;base64 et tout ira bien