Java字節(jié)流 從文件輸入輸出到文件過(guò)程解析
假如需要復(fù)制一張圖片,一份word,一個(gè)rar包??梢砸宰止?jié)流的方式,讀取文件,然后輸出到目標(biāo)文件夾。
以復(fù)制一張4M的圖片舉例。
每次讀一個(gè)字節(jié):
ch = (char)System.in.read(); //讀入一個(gè)字符,返回讀到的字節(jié)的int表示方式,讀到末尾返回-1
復(fù)制時(shí)候一個(gè)字節(jié)一個(gè)字節(jié)的讀取、寫(xiě)入,這樣是很慢的。設(shè)置一個(gè)用來(lái)緩沖的字符數(shù)組,會(huì)讓復(fù)制的過(guò)程快很多(每次讀入的字節(jié)變多)。
方便閱讀,類的名稱用中文描述
import java.io.*;
public class 字節(jié)流的緩沖區(qū) {
public static void main(String[] args) throws Exception {
FileInputStream in=new FileInputStream("E:\\photo\\IMG.jpg");
//FileOutputStream中的文件不存在,將自動(dòng)新建文件
OutputStream out=new FileOutputStream("E:\\test.jpg");
byte[] buff=new byte[1024];
int b;
long beginTime=System.currentTimeMillis();
while ((b=in.read(buff))!=-1) {
out.write(buff,0,b);
}
long endTime=System.currentTimeMillis();
System.out.println("運(yùn)行時(shí)長(zhǎng)為: "+(endTime-beginTime)+"毫秒");
in.close();
out.close();
System.out.println("正常運(yùn)行!");
}
}
這里設(shè)置的字節(jié)數(shù)組是1024個(gè)字節(jié)。復(fù)制的時(shí)間比一個(gè)字節(jié)一個(gè)字節(jié)的復(fù)制快很多。
//封裝了FileOutputStream管道之后,三種函數(shù)參數(shù) //write(b) 寫(xiě)入一個(gè)b //write(byte[] b) 將字節(jié)數(shù)組全部寫(xiě)入 //write(byte[] b,int off,int len) 例如write(byteTest,0,len)表示數(shù)組byteTest中從0開(kāi)始長(zhǎng)度為len的字節(jié) //一般都用第3個(gè)
字節(jié)緩沖流
用BufferedInputStream和BufferedOutputStream來(lái)封裝FileInputStream和FileOutputStream
方便閱讀,類的名稱用中文描述
import java.io.*;
public class 字節(jié)緩沖流 {
public static void main(String[] args) throws Exception {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\photo\\IMG.jpg"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("E:\\test.jpg"));
int len;
long begintime=System.currentTimeMillis();
while((len=bis.read())!=-1) {
bos.write(len);
}
long endtime=System.currentTimeMillis();
System.out.println("運(yùn)行時(shí)間為:"+(endtime-begintime)+"毫秒");
bis.close();
bos.close();
System.out.println("正常運(yùn)行");
}
}
將String類的對(duì)象用字節(jié)流寫(xiě)入文件時(shí)
import java.io.*;
public class outFile {
public static void main(String[] args) throws Exception {
FileOutputStream out=new FileOutputStream("example.txt");
String str="測(cè)試";
byte[] b=str.getBytes();
for(int i=0;i<b.length;i++) {
out.write(b[i]);
}
out.close();
System.out.println("輸出成功");
}
}
當(dāng)需要以附加的形式寫(xiě)入文件時(shí)
FileOutputStream out=new FileOutputStream("example.txt",true);
轉(zhuǎn)換流
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String x = in.read();
InputSteamReader和OutputStreamReader為轉(zhuǎn)換流,前者將字節(jié)流轉(zhuǎn)化為字符流,后者將字符流轉(zhuǎn)化為字節(jié)流
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?ErrorPageFilter的實(shí)際應(yīng)用詳解
這篇文章主要介紹了springboot?ErrorPageFilter的實(shí)際應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
為什么mybatis中的SqlSession一定要關(guān)閉
這篇文章主要介紹了為什么mybatis中的SqlSession一定要關(guān)閉,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java中ClassLoader類加載學(xué)習(xí)總結(jié)
本篇文章主要給大家講述了Java中ClassLoader類加載的原理以及用法總結(jié),一起學(xué)習(xí)下。2017-12-12
詳解SpringBoot如何自定義啟動(dòng)畫(huà)面
當(dāng)我們?cè)趩?dòng)SpringBoot項(xiàng)目時(shí)候會(huì)在控制臺(tái)上看到一些單調(diào)的圖案,有些朋友覺(jué)得這些圖案很單調(diào),那我們是否可以自定義啟動(dòng)畫(huà)面呢,接下來(lái)小編就給大家介紹一下SpringBoot是如何實(shí)現(xiàn)自定義啟動(dòng)畫(huà)面,感興趣的同學(xué)跟著小編一起來(lái)看看吧2023-07-07
springboot返回值轉(zhuǎn)成JSONString的處理方式
這篇文章主要介紹了springboot返回值轉(zhuǎn)成JSONString的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Java的String類中的startsWith方法和endsWith方法示例詳解
大家應(yīng)該都知道startsWith()方法用于檢測(cè)字符串是否以指定的前綴開(kāi)始,endsWith()方法用于測(cè)試字符串是否以指定的后綴結(jié)束,本文就Java的String類中的startsWith方法和endsWith方法給大家詳細(xì)講解,感興趣的朋友一起看看吧2023-11-11
Java 策略模式與模板方法模式相關(guān)總結(jié)
這篇文章主要介紹了Java 策略模式與模板方法模式相關(guān)總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01
springboot后端使用LocalDate接收日期的問(wèn)題解決
在做Java開(kāi)發(fā)時(shí),肯定會(huì)碰到傳遞時(shí)間參數(shù)的情況,本文主要介紹了springboot后端使用LocalDate接收日期的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Java入門(mén)基礎(chǔ)之Java的基本語(yǔ)法與Java所支持的數(shù)據(jù)類型
這篇文章主要介紹了Java入門(mén)基礎(chǔ)之Java的基本語(yǔ)法與Java所支持的數(shù)據(jù)類型,熟悉語(yǔ)法和數(shù)據(jù)類型通常是了解一種編程語(yǔ)言的開(kāi)始,需要的朋友可以參考下2016-02-02

