位元組緩沖流
-
位元組緩沖流介紹
-
BufferedOutputStream(OutputStream out):該類實作緩沖輸出流.通過設定這樣的輸出流, 應用程式可以向底層輸出流寫入位元組,而不必為寫入的每個位元組導致底層系統的呼叫
-
BufferedInputStream(InputStream in):創建BufferedInputStream將創建一個內部緩沖區陣列. 當從流中讀取或跳過位元組時,內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多位元組
-
構造方法
| 方法名 | 說明 |
|---|---|
| BufferedOutputStream(OutputStream out) | 創建位元組緩沖輸出流物件【write】 |
| BufferedInputStream(InputStream in) | 創建位元組緩沖輸入流物件【read】 |
位元組緩沖流復制
package io_bytetheflow.IOliu;
import java.io.*;
public class bufferStreamCopyDemo {
public static void main(String[] args) throws IOException {
//復制視頻
/* BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\java\\vd.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\java1\\vd1.avi"));
int by;
while ((by=bis.read())!=-1) {
bos.write(by);
}
System.out.println("復制成功!");
bos.close();
bis.close();
*/
BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("E:\\java1\\vd1.avi"));
BufferedOutputStream bos1 = new BufferedOutputStream(new FileOutputStream("E:\\java\\vd11.avi"));
byte[] bys = new byte[1024];
int len;
while ((len=bis1.read(bys))!=-1) {
bos1.write(bys,0,len);
}
System.out.println("復制成功!");
bos1.close();
bis1.close();
}
}
字符流
為什么會出現字符流
-
字符流的介紹
由于位元組流操作中文不是特別的方便,所以Java就提供字符流
字符流 = 位元組流 + 編碼表
-
中文的位元組存盤方式
用位元組流復制文本檔案時,文本檔案也會有中文,但是沒有問題,原因是最終底層操作會自動進行位元組拼接成中文
漢字在存盤的時候,無論選擇哪種編碼存盤,第一個位元組都是負數
編碼表
-
什么是字符集
是一個系統支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數字等
計算機要準確的存盤和識別各種字符集符號,就需要進行字符編碼,一套字符集必然至少有一套字符編碼,常見字符集有ASCII字符集、GBXXX字符集、Unicode字符集等
-
常見的字符集
-
ASCII字符集:
lASCII:是基于拉丁字母的一套電腦編碼系統,用于顯示現代英語,主要包括控制字符(回車鍵、退格、換行鍵等)和可顯示字符(英文大小寫字符、阿拉伯數字和西文符號)
基本的ASCII字符集,使用7位表示一個字符,共128字符,ASCII的擴展字符集使用8位表示一個字符,共256字符,方便支持歐洲常用字符,是一個系統支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數字等
-
GBXXX字符集:
GBK:最常用的中文碼表,是在GB2312標準基礎上的擴展規范,使用了雙位元組編碼方案,共收錄了21003個漢字,完全兼容GB2312標準,同時支持繁體漢字以及日韓漢字等
-
Unicode字符集:
UTF-8編碼:可以用來表示Unicode標準中任意字符,它是電子郵件、網頁及其他存盤或傳送文字的應用 中,優先采用的編碼,互聯網工程作業小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼,它使用一至四個位元組為每個字符編碼
編碼規則:
128個US-ASCII字符,只需一個位元組編碼
拉丁文等字符,需要二個位元組編碼
大部分常用字(含中文),使用三個位元組編碼
其他極少使用的Unicode輔助字符,使用四位元組編碼
-
字串中的編碼解碼問題
-
相關方法
方法名 說明 byte[] getBytes() 使用平臺的默認字符集將該 String編碼為一系列位元組 byte[] getBytes(String charsetName) 使用指定的字符集將該 String編碼為一系列位元組 String(byte[] bytes) 使用平臺的默認字符集解碼指定的位元組陣列來創建字串 String(byte[] bytes, String charsetName) 通過指定的字符集解碼指定的位元組陣列來創建字串
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//定義一個字串
String s = "中國";
//byte[] bys = s.getBytes(); //[-28, -72, -83, -27, -101, -67]
//byte[] bys = s.getBytes("UTF-8"); //[-28, -72, -83, -27, -101, -67]
byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6]
System.out.println(Arrays.toString(bys));
//String ss = new String(bys);
//String ss = new String(bys,"UTF-8");
String ss = new String(bys,"GBK");
System.out.println(ss);
}
}
本文來自博客園,作者:link-零,轉載請注明原文鏈接:https://www.cnblogs.com/e-link/p/16873133.html???
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530509.html
標籤:Java
上一篇:java--IO流 ? 位元組流
下一篇:static和final關鍵字
