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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ByteArrayOutputStream和ByteArrayInputStream详解

發布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ByteArrayOutputStream和ByteArrayInputStream详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ByteArrayOutputStream類是在創建它的實例時,程序內部創建一個byte型別數組的緩沖區,然后利用ByteArrayOutputStream和ByteArrayInputStream的實例向數組中寫入或讀出byte型數據。在網絡傳輸中我們往往要傳輸很多變量,我們可以利用ByteArrayOutputStream把所有的變量收集到一起,然后一次性把數據發送出去。具體用法如下:?
ByteArrayOutputStream:??? 可以捕獲內存緩沖區的數據,轉換成字節數組。?
ByteArrayInputStream: 可以將字節數組轉化為輸入流?
1 import java.io.*;?
2? 3? public class test {?
4?? public static void main(String[] args) {?
5?? int a=0;?
6?? int b=1;?
7?? int c=2;?
8?? ByteArrayOutputStream bout = new ByteArrayOutputStream();?
9?? bout.write(a); //需要注意的是write只能是0-255之間的數字,否則超出byte的表示范圍,會丟失信息。如果a=257, 寫入bout的只是1
10?? bout.write(b);?
11?? bout.write(c);?
12?? byte[] buff = bout.toByteArray();?
13?? for(int i=0; i<buff.length; i++)?
14??? System.out.println(buff[i]);?
15?? System.out.println("***********************");?
16?? ByteArrayInputStream bin = new ByteArrayInputStream(buff);?
17??? while((b=bin.read())!=-1) {?
18??? System.out.println(b);?
19?? }?
20? }?
21 }?

22?


ByteArrayOutputStream在內部會建立一個byte數組,調用write操作就是把字節寫入這個數組,調用toByteArray會將內部byte數組的內容復制到一個新的byte數組中并返回新的數組

要使用ByteArrayInoutStream, 必須將一個byte數組傳入,然后就是以操作流的方式操作這個數組,感覺用處不大


如上所示,ByteArrayOutputStream把內存中的數據讀到字節數組中,而ByteArrayInputStream又把字節數組中的字節以流的形式讀出,實現了對同一個字節數組的操作.?
綜合DataOutputStream&DataInputStream的作用和功能,與ByteArrayOutputStream和ByteArrayInputSream使用將更方便.此時DataOutputStream&DataInputStream封閉了字節流,以適當的形式讀出了字節數組中的數據.如下所示:?
1 import java.io.*;?
2?
3? public class test {?
4?? public static void main(String[] args)throws IOException {?
5?? ByteArrayOutputStream bout = new ByteArrayOutputStream();?
6?? DataOutputStream dout = new DataOutputStream(bout);?
7?? String name = "xxy";?
8?? int age = 84;?
9?? dout.writeUTF(name);?
10?? dout.writeInt(age);?
11?? byte[] buff = bout.toByteArray();?
12?? ByteArrayInputStream bin = new ByteArrayInputStream(buff);?
13?? DataInputStream dis = new DataInputStream(bin);?
14?? String newName = dis.readUTF();?
15?? int newAge = dis.readInt();?
16?? System.out.println(newName+":"+newAge);?
17? }?
18 }?



字節數組流:?
ByteArrayOutputStream:??? 可以捕獲內存緩沖區的數據,轉換成字節數組。?
ByteArrayoutputStream bout=new ByteArrayOutputStream();?
bout.write(int a);? bout.write(int b);? bout.write(int c);?
byte[] buf=bout.toByteArray();//獲取內存緩沖中的數據?
for(int i=0;i<=buf.length;i++)?
{?
? System.out.println(buf[i]);?
}?
bout.close();?
注:通過調用reset()方法可以重新定位。?
ByteArrayInputStream: 可以將字節數組轉化為輸入流?
ByteArrayInputStream bin=new ByteArrayInputStream(byte[] buf);?
int data=0;?
while( (b=bin.read())!=-1)?
{?
? System.out.println(b);?
}?
bin.close();?

與DataOutputStream&DataInputStream聯合使用:?

ByteArrayOutputStream bout=new ByteArrayOutputStream();?
DataOutputStream dos=new DataOutputStream(bout);?
String name="suntao";?
int age=19;?
dos.writeUTF(name);?
dos.writeInt(age);?
byte[] buf=bout.toByteArray();//獲取內存緩沖區中的數據?
dos.close();?
bout.close();?

ByteArrayInputStream bin=new ByteArrayInputStream(byte[] buf);?
DataInputStream dis=new DataInputStream(bin);?
String name=dis.readUTF();//從字節數組中讀取?
int age=dis.readInt();?
dis.close();?
bin.close();?

注:? DataInputStream&DataOutputStream還可以與FileInputStream&FileOutputStream?
聯合使用。?
其中:?
DataInputStream&DataOutputStream關心如何將數據從高層次的形式轉化成低層次的形式.?
FileInputStream&FileOutputStream關心如何操作存儲單元以接受和產生數據。

總結

以上是生活随笔為你收集整理的ByteArrayOutputStream和ByteArrayInputStream详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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