Java IO流之字節(jié)輸入流的使用詳解
一、InputStream字節(jié)輸入流
①、是一個(gè)抽象類,不能夠創(chuàng)建對(duì)象,需要被繼承才能夠使用
②、在java.io包下,使用時(shí)需要導(dǎo)入
③、公共的方法:
方法一: int read()
方法二: int read(byte[] b)
方法三: void close()
更多方法請(qǐng)查看官方API
二、FileInputStream文件輸入類
①、該類繼承了InputStream,可以使用InputStream中的方法
②、能夠把硬盤(pán)文件中的數(shù)據(jù)讀取到內(nèi)存中使用
③、構(gòu)造方法
FileInputStream (String name) FileInputStream (File file)
參數(shù)的含義:
name 是文件的路徑
file 是文件
作用:
創(chuàng)建對(duì)象
把對(duì)象指定到構(gòu)造方法中藥讀取的文件
④、使用步驟
1、創(chuàng)建FileInputStream對(duì)象,構(gòu)造方法中綁定要讀取的數(shù)據(jù)源
2、使用對(duì)象中的read方法,讀取數(shù)據(jù)
3、釋放資源
⑤、read()方法
讀取到文件末尾會(huì)返回-1(不管讀多少次)

⑥、補(bǔ)充:String的構(gòu)造函數(shù)
1、String (byte[] bytes) 把字節(jié)數(shù)組轉(zhuǎn)換為字符串
2、String (byte[] bytes,int offset,int length) 把字節(jié)數(shù)組的一部分轉(zhuǎn)換為字符串,從offset位置開(kāi)始,取length長(zhǎng)
⑦、一次性讀取多個(gè)文件
// todo 一次性讀取多個(gè)字節(jié)
// 1、定義一個(gè)字節(jié)數(shù)組
byte[] bytes = new byte[3];
// 2、創(chuàng)建文件輸入對(duì)象
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
// 3、讀取文件
int read = fis.read(bytes);
// 4、輸出
System.out.println(new String(bytes));
⑧、使用循環(huán)一次性讀取多個(gè)字節(jié)
// 一次性讀取多個(gè)字節(jié)
byte[] bytes1 = new byte[1024];
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
int len = 0;
while ((len=fis.read(bytes1))!=-1){
System.out.println(new String(bytes1,0,len));
???????}
三、文件復(fù)制
原理:一讀一寫(xiě)
目的:將A地址里面的a文件復(fù)制到B地址里面去
步驟:
1、創(chuàng)建一個(gè)字節(jié)輸入流對(duì)象,構(gòu)造方法中綁定要讀取的數(shù)據(jù)源
2、創(chuàng)建一個(gè)字節(jié)輸出流對(duì)象,構(gòu)造方法中綁定要寫(xiě)入的目的地
3、使用字節(jié)輸入流對(duì)象中的方法read讀取文件
4、使用字節(jié)輸出流對(duì)象中的方法write吧讀取到的字節(jié)寫(xiě)入到目的地文件中
5、釋放資源(先釋放寫(xiě)的資源再釋放讀的資源,因?yàn)閷?xiě)完就代表已經(jīng)讀完了)
方式一:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
try {
long s = System.currentTimeMillis();
// 1、創(chuàng)建字節(jié)輸入流 起始地
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
// 2、創(chuàng)建字節(jié)輸出流 目的地
FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt");
// 3、讀取數(shù)據(jù)并寫(xiě)入目的地
int len = 0;
while ((len = fis.read())!=-1){
fos.write(len);
}
long e = System.currentTimeMillis();
System.out.println("傳輸文件總共用時(shí):"+(e-s)+"毫秒");
// 4、釋放資源
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}耗時(shí):2毫秒
方式二:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
try {
long s = System.currentTimeMillis();
// 1、創(chuàng)建字節(jié)輸入流 起始地
FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt");
// 2、創(chuàng)建字節(jié)輸出流 目的地
FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt");
// 3、讀取數(shù)據(jù)并寫(xiě)入目的地
byte[] b = new byte[1024];
int len = 0;
while ((len = fis.read(b))!=-1){
fos.write(b,0,len);
}
long e = System.currentTimeMillis();
System.out.println("傳輸文件總共用時(shí):"+(e-s)+"毫秒");
// 4、釋放資源
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
兩者的區(qū)別:可以很明顯的看出來(lái)方式一和方式二的區(qū)別在于:在循環(huán)的時(shí)候判斷條件那里出現(xiàn)的不一樣,使用方式二的方式可以是文件復(fù)制更加的快捷,在初期推薦使用第二種方式進(jìn)行文件的復(fù)制
到此這篇關(guān)于Java IO流之字節(jié)輸入流的使用詳解的文章就介紹到這了,更多相關(guān)Java 字節(jié)輸入流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來(lái)學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11
java關(guān)鍵字final用法知識(shí)點(diǎn)
在本篇文章里小編給大家分享的是關(guān)于java關(guān)鍵字final用法知識(shí)點(diǎn)以及相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-09-09
SpringBoot瘦身打包部署的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Feign如何使用protobuf的類作為參數(shù)調(diào)用
這篇文章主要介紹了Feign如何使用protobuf的類作為參數(shù)調(diào)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot數(shù)據(jù)庫(kù)操作圖文教程
本文以圖文并茂的形式給大家介紹了springboot數(shù)據(jù)庫(kù)操作,感興趣的朋友一起看看吧2017-07-07
java實(shí)現(xiàn)隨機(jī)抽取獎(jiǎng)品工具類
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)隨機(jī)抽取獎(jiǎng)品工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
使用jvisualvm配合Visual GC插件監(jiān)控Java程序詳細(xì)總結(jié)
本節(jié)將會(huì)介紹一下jvisualvm的特性及作用、各個(gè)功能是如何使用的、最后會(huì)介紹jvisualvm的插件Visual GC的安裝及使用2021-09-09
Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼
這篇文章主要介紹了Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11

