zoukankan      html  css  js  c++  java
  • 【java I/O流总结】其它字符流零散总结

    前面几个IO流相关博客总结了几个比较重要的类,还剩下几个,类源码非常易懂。这里简单总结一下我记录的要点。

    CharArrayReader&CharArrayWriter

    1. CharArrayReader
    • 看了源码,感觉没什么作用,CharArrayReader大概就是遍历一个输入的char[] (可以从头开始也可以设offset),输出char或者char[]片段,相当于从输入的char中读取出来字符或者字符数组。
    2. CharArrayWriter
    • CharArrayWriter就是往一个实例域char[] (buf)中写入数据,可以写入码点值、char[]和String;
    • 构造函数可以指定buf大小,默认是32;
    • writeTo(Writer out) 方法,可以将buf输入到另一个字符输出流;
    • 跟PrintWriter一样有很多append方法;
    • toCharArray()和toString()方法,可以通过返回值获取到buf。其中经历了复制,剔除了数组空项。

    IO流类源码中多处用到了字符串拷贝方法,我发现以下两个方法都被用到

    System.arraycopy()和Arrays.copyOf()的区别

    • arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以及放入新数组中的位置;
    • copyOf()是系统自动在内部新建一个数组,调用arraycopy()将original内容复制到copy中去,并且长度为newLength。返回copy; 即将原数组拷贝到一个长度为newLength的新数组中,并返回该数组。适用于数组扩容或者缩减。

    StringWriter&StringReader

    • StringWriter和StringReader跟上面CharArray如出一辙,只不过写入写出的是String
    • 注意由于String是定长类型,StringWriter中维护一个StringBuffer对象(构造时可以指定长度),可以通过getBuffer()直接获取,也可以通过toString获得String;貌似不能转化为char[]输出出来;
    • StringReader读取只能读出来一个字符或者一个字符数组,不能String;

    个人感觉,实践中,这些字符串输入输出方法,reader用在从一个String或char[]遍历获取数据,writer用在通过不同来源拼接一个String 或char[]。没什么大用

    管道流

    • PipedWriter中有一个实例域引用对应的PipedReader对象,但是PipedReader不引用它;
    • 写数据时,PipedWriter中的write调用PipedReader的方法receive将数据写入PipedReader中的缓冲区实例域,read再从缓冲区读取;应该是这样。
    • 感觉可以用于线程间通信,找机会也详细总结一波。

    StreamEncoder和StreamDecoder

    • 使用inputStreamReader和outputStreamWriter必须要调用它们;
    • 它们会对数据进行字符——字节、字节——字符的转化,最终的读写操作还是调用字节流中的native方法来读写;
    • 字节流中默认没有缓冲区,但是它们提供了字节缓冲区。

    字节流的内容很多都跟前面学习过的字符流大同小异,如FileInputStream、BufferInputStream等等,总的看下来,字符流相当于是在字节流基础上做的进一步封装。当然也有少数独特的,如SequenceInputStream,这个后面有时间再填一下坑。

  • 相关阅读:
    javascript 中的暗物质 闭包
    关于使用 jBox 对话框的提交问题
    Orchard 的项目结构解决方案文件夹的原理与使用
    翻译:创建 Windows8 应用 Part I: Hello, world!
    翻译:FireBug 1.10 新特性
    SQL数据库设计经验
    我的女孩
    在WINDOWS下安装MRTG全攻略网络流量监控
    ASP实用函数库
    DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
  • 原文地址:https://www.cnblogs.com/buptleida/p/12625827.html
Copyright © 2011-2022 走看看