本例子的目的在于测试往oracle数据库中插入blob字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static string getimgstr(string imgfile){ //将图片文件转化为字节数组字符串,并对其进行base64编码处理 inputstream in = null ; byte [] data = null ; //读取图片字节数组 try { in = new fileinputstream(imgfile); data = new byte [in.available()]; in.read(data); in.close(); } catch (ioexception e) { e.printstacktrace(); } return new string(base64.encodebase64(data)); } |
--
利用以上的思路写的一个测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class readimagetest { public static void main(string[] args) throws ioexception { fileinputstream fis = new fileinputstream( new file( "c:\\users\\luzhifei\\pictures\\hc_logo.png" )); string picstr= "" ; byte [] read = null ; int len = 0 ; read= new byte [fis.available()]; fis.read(read); string basestr= base64.getencoder().encodetostring(read); //system.out.println( basestr); byte [] op= base64.getdecoder().decode(basestr); // system.out.println(new string(op)); fileoutputstream fos = new fileoutputstream( new file( "d:\\temp\\1.jpg" )); fos.write(op, 0 ,op.length ); fos.flush(); fos.close(); } } |
但是available()有一定的限制。
为了稳妥,严重建议采取以下方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public static void imagetobase64str() throws ioexception{ fileinputstream fis = new fileinputstream( new file( "c:\\users\\luzhifei\\pictures\\hc_logo.png" )); byte [] read = new byte [ 1024 ]; int len = 0 ; list< byte []> blist= new arraylist< byte []>(); int ttllen= 0 ; while ((len = fis.read(read))!= - 1 ){ byte [] dst= new byte [len]; system.arraycopy(read, 0 , dst, 0 , len); ttllen+=len; blist.add(dst); } fis.close(); byte [] dstbyte= new byte [ttllen]; int pos= 0 ; for ( int i= 0 ;i<blist.size();i++){ if (i== 0 ){ pos= 0 ; } else { pos+=blist.get(i- 1 ).length; } system.arraycopy(blist.get(i), 0 , dstbyte, pos, blist.get(i).length); } string basestr= base64.getencoder().encodetostring(dstbyte); byte [] op= base64.getdecoder().decode(basestr); fileoutputstream fos = new fileoutputstream( new file( "d:\\temp\\2.jpg" )); fos.write(op, 0 ,op.length ); fos.flush(); fos.close(); } |
总结
以上所述是小编给大家介绍的java读取图片并转化为二进制字符串,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:https://www.cnblogs.com/lzfhope/archive/2018/09/16/java_read_binary_file.html