IO包中的其他物件 編碼

2021-09-01 19:45:07 字數 2848 閱讀 2893

一、io包中的其他物件:

1、randomaccessfile:封裝了位元組流

特點:可以對數字進行讀和寫的操作,通過建構函式的第二個引數模式來區分讀寫:"r"、"rw".

好處:對於規則的資料,可以通過指標的偏移進行隨機的資料獲取.

方法:seek(),skipbytes(), getfilepointer();

注意:如果在指定位置寫入資料,該位置如果已經存在資料,那麼會發生資料覆蓋.

2、管道流:pipedinputstream和pipedoutputstream.

特點:讀取流和寫入流可以進行連線(通過這兩個流的建構函式,或者通過這兩個流的connect方法)。通常都要結合多執行緒使用.

3、列印流printwriter和printstream.

位元組列印流:printstream:

*system.out對應的型別為printstream.

*該類的建構函式可以接受三種型別的引數:

a, file

b, string name

c, outputstream.

前兩者在傳遞引數時可以指定字元編碼.

後者可以指定是否自動重新整理.

字元列印流:printwriter.較為常用。

*該類的建構函式可以接受四種型別的引數:

a, file

b, string name

c, outputstream.

d, writer.

前兩者在傳遞引數時可以指定字元編碼.

後兩者可以指定是否自動重新整理,只有println、printf、format方法來完成.

需求:通過列印流操作字元資料,需要編碼,同時要提高效率:

printwriter out =

new printwriter(bufferedwriter(new outputstreamwriter(new fileoutputstream("a.txt"), "utf-8")));

4、序列流:sequenceinputstream.

特點:用來將多個讀取流合併成乙個流,操作多檔案資料較為方便.

建構函式有兩個:

乙個可以將兩個流合併成乙個流.

乙個可以將列舉(enumeration)中的流物件合併成乙個流.

通常獲取enumeration是通過vector的elements方法來獲取的,但是vector效率低,故應該採用arraylist.

**如下:

public void show()

iterator it = al.iterator();

enumeration en = new enumeration()

public fileinputstream nextelement()

};sequenceinputstream sis = new sequenceinputstream(en);

fileoutputstream fos = new fileoutputstream("a.txt");

byte buf = new byte[1024];

int len = 0;

while((len = sis.read(buf)) != -1)

fos.close();

sis.close();

}5、操作物件:objectinputstream、objectoutputstream.構造的時候都需要跟位元組流關聯.

特點:用流直接操作object,將物件從記憶體存貯到了硬碟上,稱為:物件的本地持久化.

注意:1、被操作的object必須要實現乙個標記介面serializable,該介面沒有方法,用來給類進行uid指定.

objectoutputstream->writeobject().寫入物件.

objectinputstream->readobject()獲取儲存的物件.

2、靜態(static)和瞬態(transient)成員,不會進行持久化儲存.

6、操作基本資料型別的流:datainputstream、dataoutputstream.

專門用於操作基本資料型別,如:writeint(),readint();

writeutf(), readutf():所使用的編碼為utf-8的修改版,通過writeutf方法寫入的資料,之恩能夠通過readutf()方法來讀取.

7、操作字元陣列:bytearrayinputstream、byteoutputstream.

這兩個流中的子類物件,並沒有呼叫底層資源,關閉方法close()無效.

其操作的資料來源和資料目的都是記憶體.

通過流的讀寫思想,完成了對陣列的操作.

bytearrayinputstream bis = new bytearrayinputstream("abc".getbytes());

bytearrayoutputstream bos = new bytearrayoutputstream();

int len = 0;

while ((len = bis.read()) != -1)

string s = bos.tostring();

byte arr = bos.tobytearry();

bos.writeto(new fileoutputstream("a.txt"));

8、操作字元陣列chararrayreader、chararraywriter.

9、操作字串stringreader、stringwriter

以上兩個原理同7.

二、字元編碼:

ascii.

iso8859-1.

gb2312,gbk.

unicode.

utf-8.

在流對文字資料操作時,提供轉換流,轉換流融入了編碼表,偶人是gbk.

IO流中的其他物件

管道流 piped stream public class io62 1 class input 輸入 implements runnable public void run catch exception e class output 輸出 implements runnable public v...

其他的IO流

列印流 printwriter 字元輸出 printstream 位元組輸出 總結 有writer 和reader 都是字元流 列印流在實現自動換行和重新整理要做true處理 列印流一般結合bufferreader和bufferedinputstream一起使用 普通寫入 printwriter p...

物件中的其他小細節

學會動態分配記憶體 用前面介紹的方法定義的物件是靜態的,在程式運 行過程中,物件所佔的空間是不能隨時釋放的。但 有時人們希望在需要用到物件時才建立物件,在不 需要用該物件時就撤銷它,釋放它所佔的記憶體空間 以供別的資料使用。這樣可提高記憶體空間的利用率 box pt new box 12,15,18...