昨天晚上的学习

来源:互联网 发布:csgo优化fps参数 编辑:程序博客网 时间:2024/04/30 11:45

编程实例在eclipse运行,没有复制过来。字符编码那块看的挺模糊的。

 

PipedInputStream与PipedOutputStream类
  PipedInputStream类与PipedOutputStream类用于在应用程序中的创建管道通信。
  PipedInputStream类与PipedOutputStream类的编程实例。

PipedWriter和PipedReader类
使用管道流类,可以实现各个程序模块之间的松耦合通信。
像家庭的供水管道系统。具有强类聚,松耦合的特点。


ByteArrayInputStream与ByteArrayOutputStream类
  ByteArrayInputStream与ByteArrayOutputStream,用于以io流的方式来完成对字

节数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能。
  ByteArrayInputStream的两个构造函数:
    ByteArrayInputStream(byte[] buf)
    ByteArrayInputStream(byte[] buf, int offset, int length)
  ByteArrayOutputStream的两个构造函数:
    ByteArrayOutputStream()
    ByteArrayOutputStream(int)
在内存中产生临时文件,需要用这个字节数组来模拟成输入和输出流。

编程举例:
  编写一个把输入流中所有英文字母变成大写字母,然后将结果写入到一个输出流对

象。用这个函数来将一个字符串中的所有字符转换成大写。

StringReader类和StringWriter类来以字符io流的方式处理字符串。

重视io程序代码的复用:
  System.in连接到键盘,是InputStream类型的实例对象。System.out连接到显示器

,是PrintStream类的实例对象。
  不管各种底层物理设备用什么方式实现数据的终止点,InputStream的read方法总

是返回-1来表示输入流的结束。
  在Windows下,按下ctrl+z组合键可以产生键盘输入流的结束标记,在linux下,则

是按下ctrl+d组合键来产生键盘输入流的结束标记。
 
编程举例:
  借助上一页编写的函数,将键盘上输入的内容转变成大写字母后打印在屏幕上。

建议:要编程从键盘上连续读取一大段数据时,应尽量将读取数据的过程放在函数中

完成,使用-1来作为键盘输入的结束点、在该函数中编写的程序代码不应直接使用

System.in读取数据,而是用一个InputStream类型的形式参数对象来读取数据,然后

将System.in作为实参传递给InputStream类型的形式参数来调用该函数。


字符编码:
  计算机里只有数字,计算机软件里的一切都是用数字来表示的,屏幕上显示的一个

个字符也不例外。
  字符a对应的数字是97,字符b对应的数字是98等,这种字符与数字对应的编码规则

被称为ascii(美国标准信息交换码)。ascii的最高位bit位都为0,也就是说这些数

字都在0到127之间。
  中国大陆将每一个中文字符都用两个字节的数字来表示,中文字符的每个字节的最

高位bit都为1,中国大陆为每个中文字符制定的编码规则称为gb2312(国标码)。
  在gb2312的基础上,对更多的中文字符(包括繁体)进行了编码,新的编码规则称

为gbk。
  在中国大陆使用的计算机系统上,gbk和gb2312就被称为该系统的本地字符集。
  “中国”的“中”字,在中国大陆的编码是十六进制的d6d0,而在中国台湾的编码

是十六进制的a4a4,台湾地区对中文字符集的编码规则称为big5(大五码)。
  在一个国家的本地化系统中出现的一个字符,通过电子邮件传送到另外一个国家的

本地化系统中,看到的就不是那个原始字符了,而是另外那个国家的一个字符或乱码


  iso(国际标准化组织)将全世界所有的符号进行了统一编码,称之为unicode编码


  “中”这个符号,在全世界的任何角落始终对应的都是一个十六进制的数字4e2d。
  如果所有的计算机系统都使用unicode编码,在中国大陆的本地化系统中显示的“

中”这个字符,发送到伊拉克的本地化系统中,显示的仍然是“中”这个符号。
  unicode编码的字符都占用连个字节的大小,对于ascii码所表示的字符,只是简单

地在ascii码原来占用的一个字节前面,增加一个所有bits为0的字节。
  unicode只占用两个字节,在全世界范围内所表示的字符个数不会超过2的16次方(

65536),实际上,unicode编码中还保留了两千多个数值没有用于字符编码。
  在相当长的一段时期内,本地化字符编码将与unicode编码共存。
  java中的字符使用的都是unicode编码,java在通过unicode保证跨平台特性的前提

下,也支持本地平台字符集。

广义的unicode也包括UTF-8和UTF-16

UTF-8编码:
  ASCII码字符保持原样,仍然只占用一个字节,对于其他国家的字符,UTF-8使用两

个或三个字节来表示。使用UTF-8编码的文件,通常都要用EF BB BF作为文件开头的

三个字节数据。

UTF-16编码:
  UTF-16编码在unicode基础上进行了一些细节上的扩充,增加了对unicode编码没有

包括的那些字符的表示方法。
  UTF-16对unicode的扩充并没有影响unicode编码所包括的那些字符,只是增加了对

unicode编码没有包括的那些自读的表示方法,一个使用unicode编码的字符就是utf

-16格式的。
  unicode编码将0xD800-0xDFFF区间的数值保留出来,utf-16扩充的字符,占用四个

字节,前面两个字节的数值为0xD800-0xD8FF之间,后面两个字节的数值为0xDC00-

0xDFFF之间。
  为什么不让前面和后面的两个字节的数值都位于0xD800-0xDFFF之间呢?
      已经足够表示世界上所有的字符了。用上种更容易区别。
  在不同体系结构的计算机系统中,utf-16编码的unicode字符在内存中的字节存储

顺序是不同的。
  对于0x1234这样一个双字节数据,使用littleEndian和big-endian两种方式在内存

中存储的格式不同。
  如果文件以0xFF 0xFF这两个字节开头,则表明文本的其余部分是big-endian的

utf-16编码;如果文件以0xFF 0xFEz这两个字节开头,则表明文本的其余部分是

little-endian的utf-16编码。


8.不同字符编码的操作
(看的还是很模糊)

9.字符编码的编程体验
(看的还是很模糊)



过滤流与包装类:
  包装类的概念与作用
      通过FileOutputStream对象将一个浮点小叔写入到文件中,你感觉有点困难吧

?能否通过FileOutputStream对象直接讲一个整数写入到文件呢?
      假如有个DataOutputStream类提供了往各种输出流对象中写入各种类型的数据

(当然包括浮点小数)的方法。你现在所要做的工作就是:传递一个

FileOutputStream输出流对象给DataOutputStream实例对象和调用DataOutputStream

实例对象的用于写入浮点小数的方法。
      DataOutputStream并没有对应到任何具体的流设备,一定要给它传递一个对应

具体流设备的流输出对象,完成类似DataOutputStream功能的类就是一个包装类,也

叫过滤流或处理流类。
      DataOutputStream包装类的构造函数语法:
    public DataOutputStream(OutputStream out)
      DataOutputStream的部分方法列表:
    public final void writeBoolean(boolean v)
    public final void writeShort(int v)
    public final void writeChar(int v)
    public final void writeInt(int v)
    public final void writeLong(long v)
    public final void writeFloat(float v)
    public final void writeDouble(double v)
    public final void writeBytes(String v)


  BufferedInputStream与BufferedOutputStream类
      缓冲流为i/o流增加了内存缓冲区,增加缓冲区还有两个基本目的:
    -允许java程序一次不只操作一个字节,这样提高了程序的性能。
    -由于有了缓冲区,使得在流上执行skip,mark和reset方法都称为可能。
      BufferedInputStream与BufferedOutputStream是java提供的两个缓冲区包装

类,不管底层系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲区。想

想这中缓冲区与底层系统提供的缓冲区的区别。将很多个字节一次性的转换成字符串

。底层缓冲区会一下子读取很多。
      BufferedInputStream的两个构造函数:
    BufferedInputStream(InputStream in)
    BufferedInputStream(InputStream in, int size)
      BufferedOutputStream的两个构造函数:
    BufferedOutputStream(OutputStream out)
    BufferedOutputStream(OutputStream out, int size)
      BufferedReader和BufferedWriter类
    BufferedReader的readLine方法可以一次读取一行文本,BufferedWriter的

newLine方法可以向字符流中写入不同操作系统下的换行符。

  DataInputStream与DataOutputStream类
    DataOutputStream类提供了三个写入字符串的方法:
      -public final void writeBytes(String s)
        java中的字符编码是unicode
      -public final void writeChars(String s)
      -public final void UTF(String str)
    为什么DataInputStream类中有一个readUTF方法,而没有“readBytes”和

“readChars”方法呢?
  PrintStream类
  ObjectInputStream与ObjectOutputStream类
  字节流与字符流的转换
 

原创粉丝点击