日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解JAVA 字節(jié)流和字符流

瀏覽:24日期:2022-08-30 16:41:21

1、InputStream 和 Reader

InputStream 和 Reader 是所有輸入流的抽象基類,本身并不能創(chuàng)建實(shí)例來(lái)執(zhí)行輸入,但它們將成為所有輸入流的模板,所以它們的方法是所有輸入流都可使用的方法。

在 InputStream 里包含如下三個(gè)方法。

int read():從輸入流中讀取單個(gè)字節(jié),返回所讀取的字節(jié)數(shù)據(jù)(字節(jié)數(shù)據(jù)可直接轉(zhuǎn)換為int類型)。 int read(byte[] b):從輸入流中最多讀取 b.length 個(gè)字節(jié)的數(shù)據(jù),并將其存儲(chǔ)在字節(jié)數(shù)組 b 中,返回實(shí)際讀取的字節(jié)數(shù)。 int read(byte[] b, int off, int len):從輸入流中最多讀取 len 個(gè)字節(jié)的數(shù)據(jù),并將其存儲(chǔ)在數(shù)組 b 中,放入數(shù)組 b 中時(shí),并不是從數(shù)組起點(diǎn)開(kāi)始,而是從 off 位置開(kāi)始,返回實(shí)際讀取的字節(jié)數(shù)。

在 Reader 里包含如下三個(gè)方法。

int read():從輸入流中讀取單個(gè)字符,返回所讀取的字符數(shù)據(jù)(字符數(shù)據(jù)可直接轉(zhuǎn)換為int類型)。 int read(char[] cbuf):從輸入流中最多讀取 cbuf.length 個(gè)字符的數(shù)據(jù),并將其存儲(chǔ)在字符數(shù)組 cbuf 中,返回實(shí)際讀取的字符數(shù)。 int read(char[] chuf, int off, int len):從輸入流中最多讀取 len 個(gè)字符的數(shù)據(jù),并將其存儲(chǔ)在字符數(shù)組 cbuf 中,放入數(shù)組 cbuf 中時(shí),并不是從數(shù)組起點(diǎn)開(kāi)始,而是從 off 位置開(kāi)始,返回實(shí)際讀取的字符數(shù)。

對(duì)比 InputStream 和 Reader 所提供的方法,就不難發(fā)現(xiàn)這兩個(gè)基類的功能基本是一樣的。

正如前面提到的,InputStream 和 Reader 都是抽象類,本身不能創(chuàng)建實(shí)例,但它們分別有一個(gè)用于讀取文件的輸入流:FileInputStream 和 FileReader,它們都是節(jié)點(diǎn)流一一會(huì)直接和指定文件關(guān)聯(lián)。

下面程序示范了使用 FileInputStream 來(lái)讀取自身的效果。

public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 創(chuàng)建字節(jié)輸入流 FileInputStream fis = new FileInputStream('F:eclipse-workspacedemosrccomjwendemo15_3FileInputStreamTest.java'); // 創(chuàng)建一個(gè)長(zhǎng)度為1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存實(shí)際讀取的字節(jié)數(shù) int hasRead = 0; // 使用循環(huán)來(lái)重復(fù)“取水”過(guò)程 while ((hasRead = fis.read(bbuf)) > 0) { // 取出“竹筒”中水滴(字節(jié)),將字節(jié)數(shù)組轉(zhuǎn)換成字符串輸入! System.out.print(new String(bbuf, 0, hasRead)); } // 關(guān)閉文件輸入流,放在finally塊里更安全 fis.close(); }}

上面程序中的粗體字代碼是使用 FileInputStream 循環(huán)“取水”的過(guò)程,運(yùn)行上面程序,將會(huì)輸出上面程序的源代碼。

注意:上面程序創(chuàng)建了一個(gè)長(zhǎng)度為1024的字節(jié)數(shù)組來(lái)讀取該文件,實(shí)際上該Java源文件的長(zhǎng)度還不到1024字節(jié),也就是說(shuō),程序只需要執(zhí)行一次 read() 方法即可讀取全部?jī)?nèi)容。但如果創(chuàng)建較小長(zhǎng)度的字節(jié)數(shù)組,程序運(yùn)行時(shí)在輸出中文注釋時(shí)就可能出現(xiàn)亂碼一一這是因?yàn)楸疚募4鏁r(shí)采用的是 GBK 編碼方式,在這種方式下,每個(gè)中文字符占2字節(jié),如果 read() 方法讀取時(shí)只讀到了半個(gè)中文字符,這將導(dǎo)致亂碼。

上面程序最后使用了 fis.close() 來(lái)關(guān)閉該文件輸入流,與 JDBC 編程一樣,程序里打開(kāi)的文件 IO 資源不屬于內(nèi)存里的資源,垃圾回收機(jī)制無(wú)法回收該資源,所以應(yīng)該顯式關(guān)閉文件資源。Java 7 改寫了所有的 IO 資源類,它們都實(shí)現(xiàn)了 AutoCloseable 接口,因此都可通過(guò)自動(dòng)關(guān)閉資源的 try 語(yǔ)句來(lái)關(guān)閉這些 IO 流。下面程序使用 FileReader 來(lái)讀取文件本身。

public class FileReaderTest { public static void main(String[] args) { try ( // 創(chuàng)建字符輸入流 FileReader fr = new FileReader('F:eclipse-workspacedemosrccomjwendemo15_3FileReaderTest.java')) { // 創(chuàng)建一個(gè)長(zhǎng)度為32的“竹筒” char[] cbuf = new char[32]; // 用于保存實(shí)際讀取的字符數(shù) int hasRead = 0; // 使用循環(huán)來(lái)重復(fù)“取水”過(guò)程 while ((hasRead = fr.read(cbuf)) > 0) {// 取出“竹筒”中水滴(字符),將字符數(shù)組轉(zhuǎn)換成字符串輸入!System.out.print(new String(cbuf, 0, hasRead)); } } catch (IOException ex) { ex.printStackTrace(); } }}

上面的 FileReaderTest.java 程序與前面的 FileInputStreamTest.java 并沒(méi)有太大的不同,程序只是將字符數(shù)組的長(zhǎng)度改為32,這意味著程序需要多次調(diào)用 read() 方法才可以完全讀取輸入流的全部數(shù)據(jù)。程序最后使用了自動(dòng)關(guān)閉資源的 try 語(yǔ)句來(lái)關(guān)閉文件輸入流,這樣可以保證輸入流一定會(huì)被關(guān)閉。

除此之外,InputStream 和 Reader 還支持如下幾個(gè)方法來(lái)移動(dòng)記錄指針。

void mark(int readAheadLimit):在記錄指針當(dāng)前位置記錄一個(gè)標(biāo)記(mark). boolean markSupported():判斷此輸入流是否支持 mark() 操作,即是否支持記錄標(biāo)記。 void reset():將此流的記錄指針重新定位到上一次記錄標(biāo)記(mark)的位置。 long skip(long n):記錄指針向前移動(dòng)個(gè)字節(jié)/字符。

2、OutputStream 和 Writer

OutputStream 和 Writer 也非常相似,兩個(gè)流都提供了如下三個(gè)方法。

void write(int c):將指定的字節(jié)/字符輸出到輸出流中,其中 c 既可以代表字節(jié),也可以代表字符。 void write(byte[]/char[] buf):將字節(jié)數(shù)組/字符數(shù)組中的數(shù)據(jù)輸出到指定輸出流中。 void write(byte[]/char[] buf, int off, int len):將字節(jié)數(shù)組/字符數(shù)組中從 off 位置開(kāi)始,長(zhǎng)度為 len 的字節(jié)/字符輸出到輸出流中。

因?yàn)樽址髦苯右宰址鳛椴僮鲉挝唬?Writer 可以用字符串來(lái)代替字符數(shù)組,即以 String 對(duì)象作為參數(shù)。Writer 里還包含如下兩個(gè)方法。

void write(String str):將字符串里包含的字符輸出到指定輸出流中。 void write(String str, int off, int len):將字符串里從 off 位置開(kāi)始,長(zhǎng)度為 len 的字符輸出到指定輸出流中。

下面程序使用 FileInputStream 來(lái)執(zhí)行輸入,并使用 FileOutputStream 來(lái)執(zhí)行輸出,用以實(shí)現(xiàn)復(fù)制 FileOutputStreamTest.java 文件的功能。

public class FileOutputStreamTest { public static void main(String[] args) { try ( // 創(chuàng)建字節(jié)輸入流 FileInputStream fis = new FileInputStream('FileOutputStreamTest.java'); // 創(chuàng)建字節(jié)輸出流 FileOutputStream fos = new FileOutputStream('newFile.txt')) { byte[] bbuf = new byte[32]; int hasRead = 0; // 循環(huán)從輸入流中取出數(shù)據(jù) while ((hasRead = fis.read(bbuf)) > 0) {// 每讀取一次,即寫入文件輸出流,讀了多少,就寫多少。fos.write(bbuf, 0, hasRead); } } catch (IOException ioe) { ioe.printStackTrace(); } }}

運(yùn)行上面程序,將看到系統(tǒng)當(dāng)前路徑下多了一個(gè)文件:newFile.txt,該文件的內(nèi)容和 FileOutputStreamTest.java 文件的內(nèi)容完全相同。

注意:使用 Java 的 IO 流執(zhí)行輸出時(shí),不要忘記關(guān)閉輸出流,關(guān)閉輸出流除可以保證流的物理資源被回收之外,可能還可以將輸出流緩沖區(qū)中的數(shù)據(jù) flush 到物理節(jié)點(diǎn)里(因?yàn)樵趫?zhí)行 close() 方法之前,自動(dòng)執(zhí)行輸出流的 flush() 方法)。Java 的很多輸出流默認(rèn)都提供了緩沖功能,其實(shí)沒(méi)有必要刻意去記憶哪些流有緩沖功能、哪些流沒(méi)有,只要正常關(guān)閉所有的輸出流即可保證程序正常。

如果希望直接輸出字符串內(nèi)容,則使用 Writer 會(huì)有更好的效果,如下程序所示。

public class FileWriterTest { public static void main(String[] args) { try (FileWriter fw = new FileWriter('poem.txt')) { fw.write('錦瑟 - 李商隱rn'); fw.write('錦瑟無(wú)端五十弦,一弦一柱思華年。rn'); fw.write('莊生曉夢(mèng)迷蝴蝶,望帝春心托杜鵑。rn'); fw.write('滄海月明珠有淚,藍(lán)田日暖玉生煙。rn'); fw.write('此情可待成追憶,只是當(dāng)時(shí)已惘然。rn'); } catch (IOException ioe) { ioe.printStackTrace(); } }}

運(yùn)行上面程序,將會(huì)在當(dāng)前目錄下輸出一個(gè) poem.txt 文件,文件內(nèi)容就是程序中輸出的內(nèi)容。

注意:上面程序在輸出字符串內(nèi)容時(shí),字符串內(nèi)容的最后是rn,這是 Windows 平臺(tái)的換行符,通過(guò)這種方式就可以讓輸出內(nèi)容換行;如果是 UNIX/Linux/BSD 等平臺(tái),則使用 n 就作為換行符。

以上就是詳解JAVA 字節(jié)流和字符流的詳細(xì)內(nèi)容,更多關(guān)于JAVA 字節(jié)流和字符流的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩在线第七页| 欧美激情日韩| 欧美在线亚洲综合一区| 欧美另类综合| 日日夜夜免费精品视频| 国产精品videosex极品| 亚洲精品**中文毛片| 亚洲二区免费| 国产精品老牛| 国产日产精品_国产精品毛片| 精品视频97| 国产中文一区| 日韩福利在线观看| caoporn视频在线| 亚洲欧美日本视频在线观看| 国产精品亚洲综合久久| 日韩电影二区| 免费在线观看一区二区三区| 国产极品嫩模在线观看91精品| 日韩不卡视频在线观看| 亚洲69av| 欧美一级鲁丝片| 蜜桃视频一区二区三区在线观看| 国产精品一国产精品| 国产综合精品一区| 欧美久久精品| 国模 一区 二区 三区| 久久国产日韩欧美精品| 精品一区免费| 免费一级欧美片在线观看网站| 亚洲国产一区二区在线观看 | 久久精品99久久久| 久久三级视频| 久久国产乱子精品免费女| 国产91精品对白在线播放| 欧美日韩亚洲三区| 久久在线电影| 精品视频在线你懂得| 日av在线不卡| 老牛影视精品| 日韩二区在线观看| 激情综合网五月| 美女视频免费精品| 亚洲一区有码| 久久中文视频| 精品九九在线| 青青国产精品| 午夜一区在线| 99久久精品费精品国产| 欧美精品导航| 亚洲欧洲免费| 久久国产欧美| 久久精品一区二区国产| 日韩中文字幕麻豆| 日韩一区三区| 精品视频亚洲| 国产私拍福利精品视频二区| 日韩在线卡一卡二| 日韩欧乱色一区二区三区在线| 丝袜脚交一区二区| 精品国产黄a∨片高清在线| 亚洲免费网址| 日韩啪啪电影网| 国产精一区二区| 一本一道久久a久久| 亚洲电影有码| 欧美极品一区二区三区| 日韩一区中文| 久久午夜影视| 国产综合欧美| 久久男女视频| 婷婷综合六月| 激情黄产视频在线免费观看| 精品一区二区三区中文字幕在线| 欧美一区在线观看视频| 亚洲欧美专区| 亚洲一区二区三区久久久| 欧美a级一区| 久久国产中文字幕| 综合日韩av| 成人片免费看| 狠狠躁少妇一区二区三区| 精品免费视频| 精品国产欧美日韩| 欧美a一区二区| 国产精品成人3p一区二区三区| 日本天堂一区| 国产亚洲精品美女久久| 久久国产麻豆精品| 国产乱子精品一区二区在线观看 | 久久精品青草| 老牛影视精品| 91嫩草亚洲精品| 中文在线资源| 欧美日韩精品免费观看视欧美高清免费大片| 91欧美在线| 日韩精品网站| 成人av二区| 国产视频欧美| 亚洲日本三级| 911亚洲精品| 麻豆91小视频| 亚洲国产欧美日本视频| 99视频精品全国免费| 99久久九九| 激情婷婷综合| 亚洲一区国产一区| 婷婷五月色综合香五月| 国产精品午夜一区二区三区| 麻豆成人91精品二区三区| 久久免费精品| 美女一区网站| 伊人精品在线| 亚洲精品系列| 国产精品欧美日韩一区| 国产成人免费精品| 亚洲高清毛片| 亚洲一级大片| 欧美日韩99| 色欧美自拍视频| 久久精品1区| 国产亚洲精品v| 91成人精品观看| 福利欧美精品在线| 亚洲精品午夜av福利久久蜜桃| 在线看片一区| 国产精品.xx视频.xxtv| 欧美gv在线| 国产麻豆综合| 日韩视频1区| 国产一区二区三区四区二区 | 黑丝一区二区| 日韩欧美精品一区二区综合视频| 国产精品美女在线观看直播| 精品资源在线| 999精品在线| 蜜臀久久99精品久久久久宅男| 欧美日韩一区自拍| 欧美天堂视频| 一区二区三区四区日韩| 欧美精品91| 亚洲午夜在线| 日韩av一区二| 日韩一区三区| 亚洲开心激情| 高清久久一区| 久久av一区| 精品在线网站观看| 夜久久久久久| 国产精品嫩草影院在线看| 亚洲成人va| 7777精品| 蜜臀av免费一区二区三区| 色婷婷成人网| 久久精品青草| 国产美女视频一区二区| 欧美日韩在线二区| 91精品国产自产精品男人的天堂| 日韩免费在线| 亚洲bt欧美bt精品777| 伊人久久av| 日韩成人一级| 亚洲福利免费| 免费一级欧美片在线观看网站 | 三级亚洲高清视频| 色欧美自拍视频| 日韩区一区二| 欧美一区二区三区激情视频| 国产精品一区免费在线| 中文欧美日韩| 91日韩免费| 久久国产日韩欧美精品| 狠狠久久婷婷| 成人在线视频免费看| 亚洲人成亚洲精品| 激情久久婷婷| 日本久久精品| 国产欧美69| 丝袜a∨在线一区二区三区不卡| 成人台湾亚洲精品一区二区| 亚洲人www| 精品一区毛片| 天堂中文av在线资源库| 国产精品夜夜夜| 蜜臀国产一区二区三区在线播放| 日韩精品dvd| 欧美精品二区| 日韩国产欧美三级| 亚洲欧美日韩在线观看a三区| 不卡一二三区| 久久xxx视频| 日本91福利区| 日韩影院精彩在线| 999久久久91| 成人在线视频免费| 国产精品亚洲欧美一级在线| 亚洲人www| 麻豆亚洲精品| 午夜国产精品视频免费体验区| 超碰超碰人人人人精品|