JAVA字節(jié)流

目前創(chuàng)新互聯(lián)建站已為超過(guò)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、槐蔭網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
是每次從文件中讀取單個(gè)字節(jié)
字符流是每次讀出1個(gè)字符
相當(dāng)于每次讀出2個(gè)字節(jié)
FileInputStream
fs=new
FileInputStream(路徑);
這是一個(gè)字符流
InputStreamReader
ir=new
InputStreamReader(
fs)
這是一個(gè)字符流
fs
為字節(jié)流
這個(gè)類就是把字節(jié)流轉(zhuǎn)化為字符流;
字符流
就是為了方便讀取文字和符號(hào)的
都知道中文漢字要2個(gè)字節(jié)才能存儲(chǔ)
如果一次讀出1個(gè)字節(jié)
在轉(zhuǎn)化為中文
就會(huì)出亂碼了
;
這些問(wèn)題你都可以通過(guò)查詢API文檔找到答案的
用BufferedReader的這個(gè)類,其中嵌套的十一個(gè)輸入流,然后用其中的readLine()方法
理論上說(shuō)是不能直接得到的,因?yàn)樽钤嫉腎O流是字節(jié)流也就是說(shuō)一次只能讀到一個(gè)字節(jié)的數(shù)據(jù),這里面根本就沒(méi)有行數(shù)之說(shuō);此外,即使使用緩沖流最多也就是每次讀進(jìn)一行已,如果想要得到文件的行數(shù)就得等文件讀完才知道。
字節(jié)是不存在行不行這個(gè)概念的,不過(guò)你可以每次讀取固定長(zhǎng)度
字符流可以一行一行的讀取數(shù)據(jù)
代碼如下:
import?java.io.BufferedReader;
import?java.io.BufferedWriter;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.io.OutputStreamWriter;
public?class?App?{
public?static?void?main(String[]?args)?throws?FileNotFoundException,?IOException?{
try?(
FileInputStream?inputStream?=?new?FileInputStream(new?File("d:\\temp\\abc.txt"));
InputStreamReader?streamReader?=?new?InputStreamReader(inputStream);
BufferedReader?reader?=?new?BufferedReader(streamReader);
FileOutputStream?outputStream?=?new?FileOutputStream(new?File("d:\\temp\\output.txt"));
OutputStreamWriter?streamWriter?=?new?OutputStreamWriter(outputStream);
BufferedWriter?writer?=?new?BufferedWriter(streamWriter);
)?{
int?count?=?1;
String?line?=?null;
while?((line?=?reader.readLine())?!=?null)?{
writer.write(count++?+?":?"?+?line);
writer.newLine();
}
}
System.out.println("done.");
}
}
可以,首先你要了解一下什么是字節(jié)流,什么是字符流。
字節(jié)流的輸入輸出都是以字節(jié)為基本單位的,即都是0101這樣的東西。沒(méi)有格式,前臺(tái)和后臺(tái)通過(guò)相關(guān)的約定來(lái)知道怎么轉(zhuǎn)碼。 而字符流是前提條件己知的就是輸入輸出的字符。
因?yàn)樽址魇且晕谋咀址麨榛A(chǔ)的,所以當(dāng)然就有讀一行文本這樣的函數(shù)了。
而字節(jié)流沒(méi)有文本的概念,就沒(méi)有這個(gè)函數(shù)。
字節(jié)流是InputStream/outputStream, 而字節(jié)流一般是reader/writer
但是兩者還是可以轉(zhuǎn)換的。 如果你把一個(gè)InputSteram轉(zhuǎn)成了reader ,那就可以利用reader中的readline()方法了:
請(qǐng)看代碼:
InputStream is = XXXXXX; //你前面己經(jīng)得到的inputstream 字節(jié)流
InputStreamReader reader = new InputStreamReader(is);//先轉(zhuǎn)成reader
BufferedReader breader=new BufferedReader(reader); //再轉(zhuǎn)成BufferedReader
String oneLine = breader.readLine();//利用reader中的readline()
System.out.println(oneLine);
請(qǐng)注意,前提條件必須是我前面己經(jīng)說(shuō)過(guò)的,這個(gè)字節(jié)流中的字節(jié)其實(shí)就是原來(lái)由文本轉(zhuǎn)成字節(jié)的。比如后臺(tái)是這樣寫(xiě)的:
byte[] bytes = yourTextContent.getBytes("utf-8"); //先把文字內(nèi)容轉(zhuǎn)成了utf-8編碼的字節(jié)數(shù)組,然后輸出到客戶端,所以這是字節(jié)流。但內(nèi)容其實(shí)是文本。這樣客戶端才可以用reader來(lái)讀。否則是亂碼
outputStream.write(bytes);
outputStream.flush();
另外: String oneLine = breader.readLine();可以放在一個(gè)循環(huán)語(yǔ)句中,每次讀一行,讀完一行就檢測(cè)一下是否讀到空或文件尾, 如果是跳出循環(huán),這樣就可以讀完全部的流,每次以讀一行為單位。
新聞名稱:java代碼字節(jié)流讀一行 java 讀取字節(jié)流
鏈接URL:http://www.jbt999.com/article20/hgcsjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、小程序開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)