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 外存到外存的读写
外存到外存的读写,是外存到内存的读,和内存到外存的写两个处理过程的合加,其处理过程是先从外存到内存的读,然后是内存到外存的写,直到外存中的数据全部读出。