第七讲 IO输入与输出 con't

ByteArrayInputStream and ByteArrayOutputStream classes:

用于以IO流的方式完成对字节数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能。

两个构造函数:

ByteArrayInputStream (byte[] buf)

ByteArrayInputStream(byte[] buf, int offset, int length)

ByteOutputStream class:

Constructor:

ByteOutputStream ()

ByteArrayOutputStream(int)

 

重视IO程序代码的复用

System.in 连接硬盘,是inputstream类型的实例对象,system.out连接显示器,是printStream类得实例对象。

不管各种底层物理设备用什么方式实现数据的终止点,inputstreamread总是返回-1来表示输入流的结束。

 

字符编码:(需要了解更多)

计算机里面之哟数字,计算机软件里面的一切都是用数字来表示的;

ASCII—美国标准信息交换码,ASCII最搞bit位为0,????

GB2312—国标码,中国简体,最高bit位是1????

GBK—包括繁体

BIG5—太晚编码

Unicode编码全球的,占用两个字节,保留2000+数值没有用于字符编码。

Java字符使用都是用unicode编码,java在通过unicode保证跨平台特性的前提下,也支持本地平台字符集。

UTF-8编码--/u0001~/u007f, UTF-8占用一个字节保持  begins with 0

/u0000  &&  /u0080 ~ /u07ff两个字节                           begins with 110 or 10

其他三个字节                                                                                  begins with 1110

 

UTF-16编码:

unicode基础上进行了一些细节上的扩充,增加了对unicode编码没有包括的那些字符的表示方式。

Unicoe0Xd800~0xDfff的数值保留下来,UTF-16扩充的字符,占用四个字节;前两个字节为0Xd800~0xDfff,后面两个字节的数值为0XDC00~0XDFFF之间。

 

字符编码(有点搞不清楚)

字符编码应用的一个奇怪现象

notepad分别打“联通”“联想”“联”保存,只有联想有正常的保存效果。哈哈哈,果然有奸情。

不是有奸情,呵呵,那是因为文本保存的时候,对于UTF-8,在保存的时候前面应该有一个头部,但是之前都是没有的,所以在实际应用中,保存的时候是根据文本内容的特征去保存。就好像“联”,因为二进制是1100 0001 1010 1010,跟UTF-8的保存特征一样,优先保存为UTF-8,“通”也是UTF-8的特征,保存“联”跟“联通”都是UTF-8特征,所以保存为UTF-8。“联想”的“想”字是1100 1111 1110 1011UTF-8保存特征不一样,所以用国标保存。

 

字符编码的编程体验:

打印中文字符的unicode

打印中文字符的GB2312

验证写入到屏幕输出流的中文字符所采用的编码

查看系统的缺省编码

修改系统的缺省编码

验证从键盘输入流仲读取的中文字符所采用的编码

研究GB2312码到unicode码得解码过程

GB2312的中文字符被按照ISO8859-1字符集解码生成了unicoe字符串后,如何将这个字符串转换成正确unicode编码字符串。

 

视频第七八再看。

System.getProperities().list(System.out); list all the default configurations

 

视频910是字节码编程

 

视频11—过滤流和包装流

包装类的概念与作用

BufferedInputStream and BufferedOutputStream class

缓冲区为I/O流增加了内存缓冲区,增加缓冲区有两个基本目的:

1. 允许java程序依次不只操作一个字节,这样提高了程序的性能

2. 由于缓冲区,是的在流上执行skipmarkreset方法都成为可能。

BufferedInputStream and BufferedOutputStream classjava提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲区。

底层缓冲区是一下读取很多,java缓冲区是一下读取一个直到程序limit

 

BufferedInputStream constructor:

BufferedInputStream(InputStream in) //32 bytes

BufferedInputStream(InputStream in, int size) 4的整数倍,自己定义大小

 

BufferedOutputStream constructors:

BufferedOutputStream(OutputStream out)

BufferedOutputStream(OutputStream int size)

通过flush写入系统缓冲区;

 

BufferedReader and BufferedWriter classes

BufferedReaderreadLine可以读取一行文本

 

视频12—DataInputStream and DataOutputStream class

DataOutputStream class provide three methods for inputing string

         Public final void writeBytes(String s)

         Public final void writeChars(String s)

         Public final void writeUTF(String str)

Why DataInputStream has only readUTF method but “readBytes” and “readChars”?

 DataOutputStream 包装BufferedOutputStream, BufferedOutputStream 包装FileOutputStream,记得关闭DataOutputStream.但是结果跟老师不一样。

PrintStream class

提供一系列得print安顿pirntln方法,可以将基本数据类型的数据格式化成字符串输出。

格式化输出是什么意思:譬如97被格式化输出的实际字节数据为0x39 0x37

PrintStream has three constructors:

PirntStream(outputstream out)

PirntStream(outputstream out, Boolean autoflush)出现/n,自动刷新缓冲区

PirntStream(outputstream out, Boolean autoflush, string encoding)还会指定字符集编码。

printstream想对应printwriter,几时遇到文本换行标志/nprintwriter也不会自动刷新缓冲区。

 

Video13—objectinputstream and objectoutputstream

Objectinputstreamobjectoutputstream

用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流

所读写的对象必须实现了serializable interface,对象中的transient and static类型的成员变量不会被读取和写入。

 

字节流与字符流的转换

Inputstreamreader and outputstreamwriter,是用于将字节流中的字节解码成字符后读取,outputstreamwriter将字符编码成字节后写入字节流中。

Inputstreamreader的两个主要构造函数:

         Inputstreamreader(inputstream in)

         Inputstreamreader(inputsstream in, String CharsetName)

Outputstreamwriter 的两个主要构造函数()

         Outputstreamwriteroutputstream in

         Outputstreamwriteroutputstream inStrng charsetName

不要直接用inputstreamreaderoutputstreamwriter类来读写数据,应尽量使用bufferedwriter包装outputstreamwriter,用bufferedreader包装inputstreamreader

 

Video 14—java程序与其他进程的数据通信

java程序中可以用process类的实例对象来表示子进程,子进程的标准输入和输出不在连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流对象上。

调用process类得getoutputstreamgetinputstream方法可以获得连接到子进程的输出流和输入流对象。

 

Video 15—字节输入流

Decorator设计模型:用一个对象包装另外一个对象,这个一种被称为decorator的设计模式

如果要设计自己的IO包装类,这个需要继承以FilterXXX命名的类;

 

这样囫囵吞枣看了,然后跟住张老师写code,虽然当时看懂了,但是我觉得不会深刻,最后他流的作业我也没做,因为根本就不够时间,唉,觉得这个IO还是挺有难度,特别是那些一个类包装一个类的时候,一定要在看完的时候好好把课后作业做了才行,后则,追不上老师学习的进度啊。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值