日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA图片与字节流的相互转换

發布時間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA图片与字节流的相互转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hi~我是鄭突突


今天我們學習:java圖片與字節流的相互轉換。

場景:用戶端上傳一個圖片,圖片轉換成字節流,字節流使用Base64編碼,然后服務端收到Base64編碼后的字符串,然后轉換成圖片,最終實現圖片的傳輸。


為什么要使用Base64?

我們知道在計算機中任何數據都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字符。
而在網絡上交換數據時,比如說從A地傳到B地,往往要經過多個路由設備,
由于不同的設備對字符的處理方式有一些不同,這樣那些不可見字符就有可能被處理錯誤,這是不利于傳輸的。
所以就先把數據先做一個Base64編碼,統統變成可見字符,這樣出錯的可能性就大降低了。

ASCII 碼使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字符。標準ASCII 碼也叫基礎ASCII碼,使用7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號, 以及在美式英語中使用的特殊控制字符。后128個稱為擴展ASCII碼。許多基于x86的系統都支持使用擴展(或“高”)ASCII。擴展ASCII 碼允許將每個字符的第8 位用于確定附加的128 個特殊符號字符、外來語字母和圖形符號。我們的數據傳輸基本上使用ascil碼傳輸。

圖片轉換成字節流,保存的是每個像素點的rgb值?基數是256,但我們的數據傳輸,比如說255 就是11111111,就會顯示128 個特殊符號字符、外來語字母和圖形符號。就是亂碼。

Base64的實現原理:實現原理


首先將圖片轉換成字節流

static byte[] image2Bytes(String imgSrc) throws Exception {FileInputStream fin = new FileInputStream(new File(imgSrc));//可能溢出,簡單起見就不考慮太多,如果太大就要另外想辦法,比如一次傳入固定長度byte[]byte[] bytes = new byte[fin.available()];//將文件內容寫入字節數組,提供測試的casefin.read(bytes);fin.close();return bytes;}byte[] b1 = image2Bytes(path+"\\Jordan.jpg"); //path是絕對路徑 byte[] b1 = image2Bytes(path+"\\Jordan.jpg"); //path是絕對路徑System.out.println(new String(b1));System.out.println("b1=" + Arrays.toString(b1));

為什么會有負數?
因為涉及到補碼,比如說255,就是1111111,然后啥啥啥的,反正就變成了復數,這里的負數就是128以后的ascil碼值了,就是“亂碼”。

字節流的Base64編碼和解碼

byte[] b1 = image2Bytes(path+"\\Jordan.jpg"); //path是絕對路徑System.out.println(new String(b1));System.out.println("*圖片的字節數組 = " + Arrays.toString(b1));byte[] b2 = Base64.getEncoder().encode(b1);System.out.println("編碼后的字節數組 = "+Arrays.toString(b2));System.out.println("編碼后的字節數組對應的ascil碼值 = "+new String(b2));byte[] b3 = Base64.getDecoder().decode(b2);System.out.println("解碼后的字節數組 = "+Arrays.toString(b3));


還有更多的基于Base64編碼的不同方法,有基于url的,基于http的。
讀者可以自行去搜索。

static void buff2Image(byte[] b,String tagSrc) throws Exception {FileOutputStream fout = new FileOutputStream(tagSrc);//將字節寫入文件fout.write(b);fout.close();} buff2Image(b3, path+"\\test.jpg");

完成了圖像的傳遞!!

總結

以上是生活随笔為你收集整理的JAVA图片与字节流的相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。