《疯狂的JAVA讲义》笔记-第15章输入输出

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/klli15/article/details/96422502

《疯狂的JAVA讲义》笔记-第15章输入输出

  • 序列化
    • 由于远程调用时需要将对象进行序列化,所以建议每个javaBean 都实现 SerializableExternalizable,前者无需实现任何方法就可以成为可序列化对象,否则则使用在 需要自定义序列化行为的情景。
    • 序列化对象的东西有 对象 Field (包括基本类型、引用类型),不会序列化的东西有方法,static Field,transient Field 。因此以下修改并不需要修改序列化版本,即serialVersionUID :
      • 仅修改了方法,static/transient Field
    • 如果出现版本一致,但是 同名Field 的数据类型不同时,则反序列化失败
    • 如果已序列化的对象比新类的 Field ,则忽略这些 Field
    • 如果已序列化的对象比新类的 Field ,则这些 Field 为其类型的初始值
    • 反序列化的读入顺序要跟 序列化的写入顺序一致,因为在同一个实例只会序列化一次,再次序列化同样的实例则只会写入其序列化编号,以保证序列化的同样的对象仍然指向同一个实例。
      序列化同一个引用类型
    • 反序列化并没有调用类的构造器
  • 字节流与字符流
    • 字节流是以字节为单位读写的流(一个字节),字符流是以字符为单位(两个字节),但本质上是使用字节来保存文件的
    • 字节流使用的类名称是 InputStreamOutputStream ,字符流使用的类名称是 ReaderWriter
    • 转换流:使用 InputStreamReader 可以将 字节流 转为 字符流
    • PushbackInputStream 可以unread一些已经被读的数据,推回到数据源。PushbackInputStream pushback = new PushbackInputStream(new FileInputStream("/a.txt"))
  • RandomAccessFile
    • 提供 void seek(long position) long getFilePointer() 方法,可以实现非顺序访问
  • Buffer
    • 读数据前要先进行 buffer.flip()limit 移到position 的位置,避免读到 null 数据
    • 写数据前要先进行buffer.clearlimit = capacity 以及positon = 0
    • allocate() 以及 allocateDirect(),后者的创建成本高,但是读取效率高
  • Channel
    • Channel 可以将文件通过 MapedByteBuffer全部映射 到内存里,且只可以通过 Buffer进行读写
    • 建议通过 XxxInputStream.getChannel 的方法获取相对应的 Channel 实例
  • JAVA 7NIO.2
    • 文件工具类Files :方法有walkFileTree(Path start, FileVisitor<? super Path>) 其中 FileVisitor代表一个文件访问器,在遍历子目录以及文件时,触发其不同的方法,如:postVisitDirectory(T dir,IOException exce) : 遍历子目录时触发该方法以及 visitFile(T File,BasicFileAttrbutes attrs) :访问file文件是触发该方法 。这些方法都返回 FileVisitResult 枚举类,决定在方法结束后,文件访问器的行为。
    • Path工具类中WatchService 监控文件工具。可以监听指定文件夹/文件的事件

END

猜你喜欢

转载自blog.csdn.net/klli15/article/details/96422502