1 讀寫的哲學思考
讀字在“在線新華字典”中的解釋是“依照文字念,如讀書、宣讀、朗讀、範讀”。寫字在“在線新華字典”中的解釋是“用筆作字,如寫字、寫作; 描摹,敘述,如寫生、寫實、寫照。”。
在本文件討論的讀寫是指兩個空間中物質的位移。以其中一個空間爲參照物,從該空間中取出物質到放到另一個空間中謂之讀,從另一個空間中取出物質放到該空間中謂之寫。讀寫是兩個空間之間物質運動一種稱謂。讀的運動由空間1、空間2、物質、行爲四個要素構成,寫的運動由空間1,空間2、物質、行爲四個要素構成。讀的運動是假定空間1和空間2首先存在着的,其中物質包含在空間1中,其目標是將空間1中的物質移動到空間2中。讀的運動過程是打開空間1,打開空間2,按固定塊取出物質,將物質放入空間2,循環將空間1中物質取完,然後關閉空間2,關閉空間1。寫的運動是讀的運動的逆過程。
在哲學中將運動形式分爲6種,即生成、毀滅、增加、減少、修改以及位移。這種種運動又可分類四類,即影響事物本質變化的、影響事物性質變化的、影響事物數量變化的、影響事物位置變化的,其中生成、毀滅是影響事物本質變化的運動,增加、減少是影響事物數量變化的運動,修改是影響事物性質變化的運動,位移只是影響事物位置變化的。所以位移最大的特點是物質在不失真、不改變、原封不動的從一個空間到別一個空間。從上面的分析我們可以看出讀寫運動是一種位移運動。
2 程序中讀寫的認識
程序中的讀寫是程序基礎編碼之一。程序中讀寫是哲學中位移運動在程序領域中的應用實例,它必然遵循位移運動的基本規律。在程序中的讀寫是由存貯空間1、存貯空間2、數據、讀寫方法四要素構成。
在程序中的存貯空間可以分爲內存空間、外存空間。內存空間通常是指計算機內存的空間,對於程序而言是對象所在的空間。外存空間可以是本地硬盤、數據庫、網絡硬盤等。數據包括結構化數據如對象,非結構化數據如字串。讀寫方法通常由打開空間、數據讀寫、關閉空間三個部分組成,但在一些結構化空間存在着數據轉換,所以也可以是打開空間、數據讀寫、數據轉換、關閉空間三個部分組成。
在程序中對讀寫的認識,我們一般更多的關注是與本地文件或網絡上的文件的讀寫,即關注內存和外存的讀寫,而內存和內存的讀寫我們就不太關注了。而在此我們將內存與內存的讀寫也一併納入到程序的讀寫中,下面我們分別描述內存到內存的讀、內存到外存的寫、外存到內存的讀、外存到外存的讀寫。
程序中的讀寫是基於中介的讀寫。其模型如下
讀寫算法的邏輯中的讀邏輯目標是將目標數據空間指向的目標數據讀到源數據空間指向的源數據區中。如下:
(1) 中介數據存放區創建,中介數據空間讀、寫指向符定義;
(2) 中介數據空間寫指向符指向中介數據存放區;
(3) 目標數據區調用中介數據區寫入功能將數據寫入到中介數據存貯中;
(4) 中介數據區讀指向符指向中介數據存放區;
(5) 源數據區調用中介數據區的讀出功能將數據付值給源數據區。
2.1 內存到內存的讀寫
內存空間到內存空間的讀寫,是我們經常用到的,但我們一般不會認爲是讀
寫,如對象的克隆和數組的複製,我們會有這樣一些新的詞彙來取代讀寫的詞彙。下面我們以對象A到對象B的寫入爲例來分析內存到內存的寫的算法。
(1) 對象讀寫接口RW
對象讀寫接口是需對象繼承的接口,它由一個讀方法和一個寫方法構成。讀
方法的參數是一個對象讀接口,寫方法的參數是一個對象寫接口。
Interface RW
{
Public void Read(ObjectInput oi);
Public void Write(ObjectOutput oo);
}
(2) 對象讀接口
對象讀接口是需要讀的具體實現類繼承的接口,它由多個基本類型的讀方法構成。
Interface ObjectInput
{
Public int readobject();
…………..
}
(3) 對象寫接口
對象寫接口是需要寫的具體實現類繼承的接口,它由多個基本類型的寫方法構成。
Interface ObjectInput
{
Public void writeobject(Object o);
…………..
}
(4) 對象讀接口實現類
對象讀接口實現類是對象讀接口的實現類,它由一個委託實現類,對象讀
接口方法、對象讀原子方法組成。
class ObjectInputStream implements ObjectIntput
{
InputStream is; //委託實現類
Public Object readobject() {is.read()….};
…….
}
(5) 對象寫接口實現類
對象寫接口實現類是對象寫接口的實現類,它由一個委託實現類,對象寫
接口方法、對象寫原子方法組成。
Abstract class ObjectOutputstream implements ObjectOutput
{
OutputStream os; //委託實現類;
Public void writeobject(Object o) {..};
…….
}
(6) 對象間讀寫的實現類
Class A2B
{
Main()
{
//從B類中讀取數據到A類
A aa = new A(); //源數據區
B b = new B(); //目標數據區
ByteArrayOutputStream bos= new ByteArrayOutputStream();//中介寫指寫符
ObjectOutputStream oos = new ObjectOutputStream(bos); //目標與中介關聯
oos.writeObject(b.name); //目標寫入中介
oos.writeObject(b.age);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());//中介讀指寫中介數據區
ObjectInputStream ois = new ObjectInputStream(bis); //源讀入與中介讀關聯
aa.read(ois); //從中介中讀出
bos.close(); //空間關閉
oos.close();
bis.close();
ois.close();
}
}
2.2 內存到外存的寫
內存到外存的寫,我們以內存中某個對象將其內容寫入到文件中爲例。其處
理方式與內存到內存的讀寫是一樣的,也同樣是基於中介的寫。其處理過程如下:
(1) 創建一個文件;
(2) 創建一個文件寫入流;
(3) 創建一個對象寫入流;
(4) 對象寫入流與文件寫入流關聯;
(5) 內存中對象A調用對象寫入功能,將內存對象數據寫入到對象中,由對象寫入流寫到文件中;
(6) 文件寫入流、對象寫入流關閉.
2.3 外存到內存的讀
外存到內存的讀,即從文件中讀取數據,寫入到內存對象中。我們以內存中
某個對象將從文件中讀取數據到對象中爲例。其處理方式與內存到內存的讀寫是一樣的,也同樣是基於中介的讀。其處理過程如下:
(1) 打開一個文件;
(2) 創建一個文件讀入流;
(3) 創建一個對象讀入流;
(4) 對象讀入流與文件讀入流關聯;
(5) 內存中對象A調用對象讀入功能,將文件數據讀入到對象中;
(6) 文件讀入流、對象讀入流關閉.
2.4 外存到外存的讀寫
外存到外存的讀寫,是外存到內存的讀,和內存到外存的寫兩個處理過程的合加,其處理過程是先從外存到內存的讀,然後是內存到外存的寫,直到外存中的數據全部讀出。
3 JAVA語言中的讀寫
4 JAVA語言的讀寫實例