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

您的位置:首頁技術文章
文章詳情頁

詳解JAVA 字節流和字符流

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

1、InputStream 和 Reader

InputStream 和 Reader 是所有輸入流的抽象基類,本身并不能創建實例來執行輸入,但它們將成為所有輸入流的模板,所以它們的方法是所有輸入流都可使用的方法。

在 InputStream 里包含如下三個方法。

int read():從輸入流中讀取單個字節,返回所讀取的字節數據(字節數據可直接轉換為int類型)。 int read(byte[] b):從輸入流中最多讀取 b.length 個字節的數據,并將其存儲在字節數組 b 中,返回實際讀取的字節數。 int read(byte[] b, int off, int len):從輸入流中最多讀取 len 個字節的數據,并將其存儲在數組 b 中,放入數組 b 中時,并不是從數組起點開始,而是從 off 位置開始,返回實際讀取的字節數。

在 Reader 里包含如下三個方法。

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

對比 InputStream 和 Reader 所提供的方法,就不難發現這兩個基類的功能基本是一樣的。

正如前面提到的,InputStream 和 Reader 都是抽象類,本身不能創建實例,但它們分別有一個用于讀取文件的輸入流:FileInputStream 和 FileReader,它們都是節點流一一會直接和指定文件關聯。

下面程序示范了使用 FileInputStream 來讀取自身的效果。

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

上面程序中的粗體字代碼是使用 FileInputStream 循環“取水”的過程,運行上面程序,將會輸出上面程序的源代碼。

注意:上面程序創建了一個長度為1024的字節數組來讀取該文件,實際上該Java源文件的長度還不到1024字節,也就是說,程序只需要執行一次 read() 方法即可讀取全部內容。但如果創建較小長度的字節數組,程序運行時在輸出中文注釋時就可能出現亂碼一一這是因為本文件保存時采用的是 GBK 編碼方式,在這種方式下,每個中文字符占2字節,如果 read() 方法讀取時只讀到了半個中文字符,這將導致亂碼。

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

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

上面的 FileReaderTest.java 程序與前面的 FileInputStreamTest.java 并沒有太大的不同,程序只是將字符數組的長度改為32,這意味著程序需要多次調用 read() 方法才可以完全讀取輸入流的全部數據。程序最后使用了自動關閉資源的 try 語句來關閉文件輸入流,這樣可以保證輸入流一定會被關閉。

除此之外,InputStream 和 Reader 還支持如下幾個方法來移動記錄指針。

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

2、OutputStream 和 Writer

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

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

因為字符流直接以字符作為操作單位,所以 Writer 可以用字符串來代替字符數組,即以 String 對象作為參數。Writer 里還包含如下兩個方法。

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

下面程序使用 FileInputStream 來執行輸入,并使用 FileOutputStream 來執行輸出,用以實現復制 FileOutputStreamTest.java 文件的功能。

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

運行上面程序,將看到系統當前路徑下多了一個文件:newFile.txt,該文件的內容和 FileOutputStreamTest.java 文件的內容完全相同。

注意:使用 Java 的 IO 流執行輸出時,不要忘記關閉輸出流,關閉輸出流除可以保證流的物理資源被回收之外,可能還可以將輸出流緩沖區中的數據 flush 到物理節點里(因為在執行 close() 方法之前,自動執行輸出流的 flush() 方法)。Java 的很多輸出流默認都提供了緩沖功能,其實沒有必要刻意去記憶哪些流有緩沖功能、哪些流沒有,只要正常關閉所有的輸出流即可保證程序正常。

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

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

運行上面程序,將會在當前目錄下輸出一個 poem.txt 文件,文件內容就是程序中輸出的內容。

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

以上就是詳解JAVA 字節流和字符流的詳細內容,更多關于JAVA 字節流和字符流的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品高清不卡| 美女精品久久| 亚洲免费中文| 免费视频一区二区| 三级久久三级久久久| 亚洲免费一区三区| 国产伦精品一区二区三区千人斩| 精品网站aaa| 麻豆极品一区二区三区| 亚洲国产欧美日本视频| 婷婷亚洲五月色综合| 少妇精品久久久| 久久婷婷国产| 99精品国产一区二区三区| 先锋影音国产一区| 国产欧美日韩精品一区二区免费| 国产+成+人+亚洲欧洲在线| 亚洲国产福利| 欧美女激情福利| 欧美精品国产白浆久久久久| 麻豆理论在线观看| 国产精品婷婷| 久久精品国产99国产精品| 国产美女高潮在线| 先锋影音久久久| 国产精品videossex久久发布 | 日本v片在线高清不卡在线观看| 国产欧美日韩在线一区二区| 日韩欧美中文| 婷婷五月色综合香五月| 久久久久免费| 亚洲最新av| 国产96在线亚洲| 久久国产精品久久久久久电车| 国产精品啊啊啊| 日韩三区免费| 欧美视频久久| av亚洲免费| 国产精品igao视频网网址不卡日韩| 日本在线高清| 国产欧美午夜| 亚洲欧洲一区| 福利一区和二区| 青青在线精品| 美女精品在线观看| 欧美久久天堂| 久久成人av| 日本大胆欧美人术艺术动态| 国产成人精品999在线观看| 亚洲一区国产一区| 精品无人区麻豆乱码久久久| 婷婷成人av| 香蕉国产精品| 亚洲精品成人图区| 国产日韩欧美高清免费| 国产精品毛片| 久久国产免费| 首页国产精品| 久久av偷拍| 日本视频在线一区| 免播放器亚洲| 五月天久久网站| 日韩在线观看不卡| 国产一区二区三区亚洲综合| 国产日韩在线观看视频| 国产视频一区在线观看一区免费| 日韩中文在线电影| 国产成人精品一区二区三区视频 | 日韩精彩视频在线观看| 免费欧美一区| 亚洲精品在线影院| 狠狠久久伊人| 久久久久伊人| 国产精品任我爽爆在线播放 | 国产欧美一区二区三区精品观看| 中文精品电影| 免费日韩视频| 国产亚洲在线观看| 99国产精品久久久久久久成人热 | 亚洲激精日韩激精欧美精品| а√天堂8资源在线| 国产探花在线精品| 日韩成人一级| 少妇精品久久久| 在线一区二区三区视频| 国产精品日韩| 国产视频一区三区| 美女久久网站| 亚洲日本久久| 日韩高清不卡在线| 欧美亚洲国产日韩| 国产色噜噜噜91在线精品| 日本色综合中文字幕| 日本午夜精品久久久久| 91精品国产自产观看在线| 久久国产视频网| 日韩成人精品一区二区三区| 国产探花一区在线观看| 国产乱码精品| 久久久久黄色| 综合日韩av| 免费国产自久久久久三四区久久| 欧美女激情福利| 蜜桃一区二区三区在线| 日韩精品国产精品| 欧美激情视频一区二区三区免费 | 亚洲深夜影院| 色8久久久久| 国产乱论精品| 麻豆视频在线观看免费网站黄 | 欧美国产先锋| 91麻豆国产自产在线观看亚洲| 国产网站在线| 在线日韩中文| 亚洲精品极品| 国产精品一站二站| 精品91福利视频| 免费精品国产的网站免费观看| 日韩中文字幕av电影| 久久国产生活片100| 精品丝袜久久| 欧美日韩日本国产亚洲在线| 日韩精品国产精品| 日本一区二区免费高清| 激情综合激情| 国产午夜一区| 日韩精品一卡| 亚洲欧美在线专区| 国产一区二区色噜噜| 午夜久久美女| 国产精品sss在线观看av| 成人一二三区| 丝袜脚交一区二区| 国产欧美一区二区三区米奇| 国产精品久久久久久久久久10秀| 91九色精品国产一区二区| 亚洲a级精品| 成人午夜毛片| 蜜桃视频一区二区| 精品中文在线| 三级在线观看一区二区| 麻豆成人91精品二区三区| 婷婷激情久久| 国产欧美高清视频在线| 国产99精品| 国产精品入口久久| 久久久久一区| 国产免费播放一区二区| 青青久久av| 国产欧美一区二区精品久久久| 日本欧美不卡| 国产日韩精品视频一区二区三区| 欧美日韩精品一区二区视频| 欧美视频二区| 亚洲一区日本| 91综合视频| 日韩av三区| 欧美在线亚洲| sm久久捆绑调教精品一区| 色婷婷久久久| 国产欧美精品久久| 午夜亚洲精品| 高清久久精品| 国产亚洲高清一区| 亚洲欧美日韩在线观看a三区| 高清av一区| 青青青国产精品| 午夜日韩av| 青青久久av| 精品一区av| 久久国产精品免费精品3p| 欧美日韩精品一本二本三本| 国产一区二区三区四区二区| 日韩动漫一区| 蜜臀va亚洲va欧美va天堂| 日韩不卡视频在线观看| 国产精品一区二区av交换 | 国产不卡av一区二区| 美国欧美日韩国产在线播放| 91精品一区二区三区综合在线爱| 国产精品草草| 日韩一区二区三区在线看| 9色国产精品| 激情久久婷婷| 亚洲成a人片| 风间由美中文字幕在线看视频国产欧美| 日韩精品1区2区3区| av亚洲在线观看| 视频一区视频二区中文| 免费成人在线观看| 欧美另类专区| 国产一区二区三区天码| 国产欧美日韩影院| 婷婷精品在线| 亚洲丝袜美腿一区| 亚洲电影在线一区二区三区| 成人免费电影网址| 日韩成人高清| 亚洲精品成人图区| 色欧美自拍视频|