传智播客的JAVA SE高级视频2 IO 自学笔记

传智播客的JAVA SE高级视频2 IO 自学笔记:

 

File类:

    1.IO包中唯一代表磁盘文件本身信息的类,而不是文件中内容。

    2.创建、删除、重命名文件等方法。

    3.Java中目录被当作一种特殊文件使用,list方法返回所有子目录和文件。

    4.Unix下路径分隔符'/',windows下分隔符为'/'。


RandomAccessFile类

    支持随机访问方式。

    RandomAccessFile类在随机(相对顺序而言)读写等长记录格式文件时有很大优势。可以将记录当成一个整体来读取。

    RandomAccessFile类仅限于操作文件,不能访问其他IO设备,如网络、内存映像。

    writeChars();

    readChar();


流:字节序列的抽象概念

    文件是数据的静态存储形式,而流是数据传输时的形态。


InputStream

    int read() 读取一字节。为什么不返回byte呢?

    因为二进制形式为11111111的数,以byte表示为-1,以int表示为255。返回-1表示读到文件尾。

    int available();


OutputStream

    void write(int b);     // byte运算时自动提升为int

    flush();


FileInputStream、FileOutputStream


PipedInputStream、PipedOutputStream

    使用管道流类,可以实现各个程序模块间的松耦合通信。


ByteArrayInputStream、ByteArrayOutputStream

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


System.in是InputStream类型

System.out是PrintStream类型

    不管各种底层物理设备用什么方式实现数据终止点,InputStream的read方法总以-1表示结束。

    windows下:Ctrl+Z表示键盘输入结束,Ctrl+C表示强制结束。

    Unix/Linux下:Ctrl+D表示输入结束

    建议:要编程从键盘上连续读取一大段数据时,应尽量将读取数据的过程放在函数中,使用-1作为输入结束。在函数中编写代码不应直接使用System.in读取,而应用一个InputStream类型的形参,然后将System.in作为实参传递给函数。


字符编码:

    1.计算机里只有数字,计算机里一切都是用数字来表示的。

    2.字符a对应数字97,b对应98,这种字符与数字对象的编码规则称为ASCII。ASCII最高位都为0,能标售0~127.

    3.中文字符,用两个字节表示,每个字节最高位为1,编码为GB231(国标码)。

    4.在GB2312上,对更多中文字符(繁体)进行了编码,新的编码规则称为GBK。

    5.中国的"中"字,在大陆编码为D6D0,在台湾是A4A4,台湾地区对中文字符集的编码规则称为BIG5(大五码)。

    6.在一个国家的本地化系统中出现的一个字符,通过网络传送到另一个国家的本地化系统中,看到的就不是原始字符了,而是另一个国家的一个字符或乱码。


Unicode编码:

    1.ISO组织将全世界所有字符统一编码,称为Unicode编码。

    2."中"字,在Unicode中对应的是4E2D。

    3.Unicode占2字节,ASCII中字符只是简单地增加一个字节(0),Unicode中有63000多个字符,2000多个未使用。

    4.未包括藏文、一些古字、满文等。

    5.在相当长的一段时间内,本地化字符编码将与Unicode编码共存。

    6.Java中字符使用Unicode编码。


UTF-8编码:

    ASCII码字符保持原样,仍占1字节,对其他国家字符,UTF-8使用2或3个字节表示。使用UTF-8的文件,通常都要用EF BB BF作为文件开头的3个字节数据。

    优点:不出现0x00字节,便于应用程序检测数据在传输中是否发生了错误。

    缺点:有的字符占太多字节。


UTF-16编码(2字节):

    在Unicode上扩充,增加了藏文、满文、古字、阿拉伯问等。

    Unicode编码将0xD800-0xDFFF区间的数据保留处理,UTF-16扩充的字符,占用4字节。


String str="中国";     // Unicode

str.getBytes("GBK");


包装类:

    DataOuputStream:写入各种类型数据,float、int...

    PipedOutputStream

    BufferedOutputStream

    PrintStream:遇到换行,自动刷新,清空缓冲区。

    PrintWriter:println方法会根据操作系统的不同而生成相应的文本换行符,windows下:"/r/n",Linux下:"/n"。遇到换行,不会自动刷新。

    ObjectInputStream和ObjectOutputStream:所读写对象必须实现了Serializable接口,对象中static和transient不会被读写。

    InputStreamReader和OutputStreamWriter


Java程序与其他进程数据通信(常用)

    使用Process类表示子进程,子进程的标准输入和输出不是再连接到键盘和显示器,而以管道流的形式连到父进程的一个输出和输入流上。


Decorator设计模式(装饰者模式)

    1.用一个对象(the Decorator)包装另一个对象,称为Decorator模式。

    2.需要设计自己的IO包装类时,需要继承以FilterXXX命名的类

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值