其他流对象(day23)


二十三天 其他流对象

1. 打印流
       System.out.println()
       特点:
          此流不会抛出异常
          此流操作数据目的,不操作数据源
          Java Web中,常用打印流,不需要创建

2. PrintStream
     构造方法中
          接收File对象
          字节输出流
         字符串形式的文件名
 
  PrintWriter
     构造方法中
           接收File对象
            字节输出流
          字符串形式的文件名
         字符输出流
     在构造方法中,写一个数据目的,跟true,表示自动刷新此流,但是自动刷新需要调用
      println printf format 这个流才会实现自动刷新
      此流会将我们的数据,输出到目的(控制台,或者硬盘文件,网络主机,客户端浏览器)地中
      必须要刷新

2. 对象的序列化与反序列化(持久化)
      将对象中常用的数据,写入到磁盘,进行永久性保存,对象的序列化
     将磁盘中存储对象的数据,读取出来,在程序中使用,对象的反序列化
      ObjectInputStream 读取对象
      ObjectOutputStream 写出对象
          构造方法中,包装一个字节输出流对象
         使用写出对象的writeObject方法,将对象写出去
           静态不属于对象,所以在对象的序列化中,没有静态参与的

     Exception in thread "main" java.io.NotSerializableException: cn.itcast.ios.Person
 at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
 at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
 at cn.itcast.ios.ObjectStream.writeObj(ObjectStream.java:14)
 at cn.itcast.ios.ObjectStream.main(ObjectStream.java:6)


    Exception in thread "main" java.io.InvalidClassException: cn.itcast.ios.Person;
    local class incompatible:
    stream classdesc serialVersionUID = -4776930987922557818,
    local class serialVersionUID = 7777475771319311528
 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:604)
 at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
 at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
 at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
 at cn.itcast.ios.ObjectStream.readObj(ObjectStream.java:20)
 at cn.itcast.ios.ObjectStream.main(ObjectStream.java:7)
3. Serializable接口
       这是一个没有抽象方法的接口
       日后见到这样的接口,叫做标记型接口
       实现它的类,相当于打了一个标记


4. 对象的序列化出现的序列化冲突
     序列对象的时候,JVM会给我们的Person.class文件中写一个序列号 long型的整数
      此时我们将对象进行了序列化

     修改了Person的源文件,编译class文件,这个时候,序列号已经被改变了 ,并没有重新写对象
      继续读取就会造成,序列号冲突问题

      当我们对象已有的源文件,进行了改变以后,并不影响其序列化的功能的时候,没有必要从新对对象
      进行序列化(从新写一个对象文件),
      需要,对Person这个类,进行手动编写序列号,如果手动的了写序列号,JVM不会在给我们生生序列号


5. 管道流 
       PipedOutputStream
      PipedInputStream


6. Properties对象
       双列集合,键,值的数据类型已经固定为String
       集合中的数据可以通过IO写入到文件,还可以通过IO读取文件中的数据,存入到集合
        setProperty(键,值);
       getProperty(String key) 返回的是与键对应的值,没有这个键,返回null
       void load(字符读取流)IO读取文件,集合就关联到了一起
        void store(字符输出流, String comments) 将集合中的输入,写回到文件中


7. Properties案例
      要求: 有一个应用程序,在一台机器上,运行3次,第4次,就不运行了,提示用户交钱
            需要一个永久性存储的文件,记录了这个程序运行的次数
            需要文件的支持,文本文件就可以
       读,写,FileWriter FileReader
        File对象,进行文件是否存在的判断和创建
        Properties获取文本中的数据集,存储在集合中
         存储在集合中的记录次数是String,能++ No  转成Integer.parseInt();
    
         如果程序是第一次运行,就在你的硬盘上写一个记录的文件,记录1
        当你在第二次运行的时候,读取这个记录文件,记录的数据时几,如果小于3 数据++
        

当你再运行的时候,读取这个记录文件,当数据记录的是3,或者比三大,停止程序的运行

8. 编码表
    ASCII
    GB2312  4000个汉字
    GBK  20000个汉字  两个字节,表示一个汉字
     UTF-8 国际化编码表  3个字节,表示一个汉字
    ISO8859-1 拉丁文
      apache Tomcat ISO8859-1 采用编一次,解一次的方式,还原回中文
         在你的网页中,输入了中文,get方式提交Tomcat会采用ISO8859-1解码
       String s = new String("乱码".getBytes("utf8"),"gbk");
       request.setCharaEncoding("gbk");
      使用过滤器 Filter 实现Filter接口,重写doFileter方法


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值