io流是字符流還是字節流?所有的字節輸入流繼承 inputStream所有的字節輸出流繼承 outputStream,現在小編就來說說關于io流是字符流還是字節流?下面内容希望能幫助到你,我們來一起看看吧!
所有的字節輸入流繼承 inputStream
所有的字節輸出流繼承 outputStream
使用輸入流輸出流時注意是否需要成對出現,就好比大管道小管道似的,輸入管道要與輸出管道匹配才行。
使用以上介紹的輸入輸出流,簡單的測試代碼
public static void main(String[] args) {
try ( InputStream inputStream =new FileInputStream("E:\\測試.txt");//讀取文件輸入流
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);//聲明BufferedInputStream
OutputStream outputStream = new FileOutputStream("E:\\測試輸出.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream)
){
//每次讀取1024個字節
byte[] buffer=new byte[1024];
int len;
//讀到文件末尾時返回-1
while ((len = bufferedInputStream.read(buffer))!=-1){
//b - 數據。
//off - 數據中的起始偏移量。
//len - 要寫入的字節數。
bufferedOutputStream.write(buffer,0,len);
}
bufferedOutputStream.flush();//刷新此輸出流,并強制将任何緩沖的輸出字節寫入流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
讀取固定的字節數,效率上肯定是有一定的影響的
public static void main(String[] args) {
try(InputStream inputStream =new FileInputStream("E:\\測試.txt");//讀取文件輸入流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
int len = -1;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
System.out.println(outputStream.toString("gb2312"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
接着使用StreamUtils或者Hutool工具轉換文件輸入流為字節數組
public static void main(String[] args) {
try(InputStream inputStream =new FileInputStream("E:\\測試.txt");//讀取文件輸入流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] bytes = StreamUtils.copyToByteArray(inputStream);
outputStream.write(bytes);
System.out.println(outputStream.toString("gb2312"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
使用流操作時,就一定要注意資源是否關閉,如果是手動關閉,則需要注意的是關閉的順序,遵循後打開的流先關閉的順序。
如果非正常關閉,則會造成資源的浪費,文件的寫入錯誤,如zip文件會出現 “不可預料的壓縮文件末端”導緻無法打開。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!