Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1527398
  • 博文数量: 329
  • 博客积分: 2773
  • 博客等级: 少校
  • 技术积分: 4219
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:17
个人简介

淡定从容,宁静致远

文章分类

全部博文(329)

文章存档

2016年(4)

2015年(50)

2014年(68)

2013年(45)

2012年(162)

分类: Java

2014-10-16 10:08:33


1 综合运用处理流
  FileInputStream fis = new FileInputStream(file);
  BufferedInputStream bis = new BufferedInputStream(fis);
  DataInputStream in = new DataInputStream(bis);


  FileOutputStream fos = new FileOutputStream(file);
  BufferedOutputStream bos = new BufferedOutputStream(fos);
  DataOutputStream out = new DataOutputStream(bos);


 
2 字符串的序列化(文字的编码方案)


 1) Stirng 字符串本质上是char[] 将char[]转换成
 byte序列就是字符串的编码, 就是字符串的序列化问题
  char是16位无符号整数, 值是unicode编码
  (怎么解决中文乱码问题)
  
 2) utf-16be 编码方案, 将16位char从中间切开为
 2个byte.utf-16be 是 将unicode char[] 序列化
 为byte[] 的编码方案 能够支持65535 个字符编码, 
 英文浪费空间
  char[] = ['A','B','中'] 
  byte[] = [00, 41, 00, 42, 4e, 2d]
  
 3) UTF-8 编码方案 采用变长编码 1~N方案, 其中英文
 1个byte,中文3个byte 
 
char : 16位  中文 英文
byte : 8位  
 4) GBK 中国国标,支持20000+ 中日韩英,英文一位编码,
中2位与unicode不兼容, 需要码表转换(散列表查询)
 char[] = ['A','B','中'] //4e2d 
 GBK(GB2312): {41,42,d6,d0},
案例: io3.Demo2


5 认识文本和文本文件 
 1) java的文本(char)是16位无符号整数, 是字符的
 unicode编码
 2) 文件是byte by byte 的数据序列
 3) 文本文件是 文本char 序列按照某种(utf-8, 
 utf-16be, gbk)
  方案序列化为byte, 的存储结果.
案例: io3.Demo2
  
6 字符流(Reader Writer) 
 1) 字符的处理, 一次处理一个字符(unicode)
 2) 字符的底层仍然是基本的字节流
 3) 字符流的基本实现: 
    InputStreamReader:完成byte流解析为char流,
     按照编码解析
    OutputStreamWriter:提供char流到byte流, 
    按照编码处理
案例: io3.Demo3
字符流的处理流
 4) 字符流的过滤器
  是字符读写的功能扩展, 极大的方便了文本的读写操作
   BufferedReader : readLine()
   BufferedWriter :
   PrintWriter: println()
   
 5)读取一个文本文件:
InputStream is = 
new FileInputStream("gbk.txt");
Reader in = new InputStreamReader(is);
BufferedReader reader = 
new BufferedReader(in);
  or
BufferedReader in = new BufferedReader(
new FileReader(filename));
 6) 写出一个文本文件:
   PrintWriter out = 
new PrintWtirer(new FileWriter(filename));
  or
     PrintWriter out = 
new PrintWtirer(
new OutputStreamWriter(
new FileOutputStream(filename)));


 7) 系统的默认编码 中文一般是GBK
   String encoding=
   System.getProperty("file.encoding");


7 对象的序列化: 将Object转换为byte序列,就是序列化,
反之叫反序列化
 1) 序列化流, 是过滤流
    ObjectOutputStream writeObject(Object)
     序列化对象
    ObjectInputStream readObject() 
    对象的反序列化
 2) 序列化接口: 对象必须实现"序列化接口"才能进行
  "序列化"
   否则出现不能序列化的异常!
 3) JavaBean 规范, 必须实现Serializable接口
   Java API中的类大多是Java Bean, 基本都实现了
   Serializable
 Serializable标记性接口:标识作用,表示实现这个接口
 对象可以序列化,没有任何的方法实现,java中最特殊的一个
 接口
 
8 浅层复制与深层复制
 1) Java的默认复制规则是浅层复制, 性能好, 
 隔离性差浅层复制现象, 只复制第一层对象
 2) 利用序列化实现深层复制
案例:io3.Demo6Card(复制纸牌)




9.Java IO 总结
 1)是一种数据操作模型: 把任何数据都作为Byte的有序
 集合看待逐一处理的方式方式叫做流.
  Java 流模型, 是byte by byte 是数据集合
   data   :  41 42 00 00 ff ff d6 d0 
   index  :   0  1  2  3  4  5  6  7  8
   pointer:   ^ 
 2) 文件流是流的一种
   InputStream --- FileInputStream 
                |- ByteArrayInputStream
 3) Byte流是最基本的流操作     
   InputStream  Byte输入流
   OutputStream  Byte输出流
 4) 流动最基本实现: 节点流
   FileInputStream 
   ByteArrayInputStream
   等....
 5) 最基本的流操作: read() write()
 
10 流的过滤器(处理流,扩展io流功能,或者提高其性能)
 1) 流的过滤器是: 流的功能扩展: 需要基于基本的流 
 2) 一类是: 基本byte数据的处理
    BufferedInputStream 
    ZipInputStream
    JarInputStream
    
 3) 一类是: 数据序列化功能扩展
    DataInputStream  基本类型的IO
    ObjectInputStream 对象IO
    InputStreamReader String(char[])


                  FIS      BIS    ISR        BR
 文件(Byte 序列)--输入流--> 过滤器--过滤器 --> 过滤器 --> 应用程序 
 [7f ff ff ff]   read()   read() read()->char readLine()->String  
 
阅读(728) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~