| 电脑中的数据都是以0与1的方式来储存,如果您要在两个装置之间进行数据的存取,当然也是以0与1位元的方式来进行,实际上数据的流动是透过电路,而上面
的数据则是电流,而在程序上来说,将数据目的地与来源之间抽象化为一个串流(Stream),而当中流动的则是位元数据。 01010101 Stream -->
来源地 ===================== 目的地 在Java中有两个类用来作串流的抽象表示:InputStream与OutputStream。 InputStream是所有表示位元输入串流的类之父类,它是一个抽象类,子类会覆盖它当中所定义的方法, InputStream用于从装置来源地读取数据的抽象表示,例如System中的标准输入串流 in 对象就是一个 InputStream,在程序开始之后,这个串流对象就会开启,以从标准输入装置中读取数据,这个装置通常是键盘或是其它使用者定义的装置。 OutputStream是所有表示位元输出串流的类之父类,它是一个抽象类,子类会覆盖它当中所定义的方法, OutputStream是用于将数据写入目的地的抽象表示,例如System中的标准输出串流对象 out ,out 的类型是PrintStream, 这个类是OutputStream的子类(FilterOutputStream继承OutputStream, PrintStream再继承FilterOutputStream),在程序开始之后,这个串流对象就会开启,您可以将数据透过它来写入目的地装置,这 个装置通常是荧幕或其它使用者定义的装置。 下面程序可以读取键盘输入串流,并将数据以10进位方式显示在荧幕上:
package onlyfun.caterpillar; 执行结果:
字节A输入后被标准输入串流读取,A的位元表示以十进位来看就是65,这是A字节的编码(查查ASCII编码表就知道了),在这边要注意的是read()只读取一个位元组的数据,而当输入A并按Enter键时,实际上在串流中会有A的位元数据与换行字节的位元数据,换行字节的位元数据以十进位来表示的话就是10。 作业系统之间的换行字节各不相同,Windows 为"\r\n",Linux 为'\n',而 Mac 为'\r'。 |