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,这个后面有时间再填一下坑。

  • 相关阅读:
    php-7.0.16 , apache2.4.25 配置
    一次完整的HTTP请求需要的7个步骤
    TypeScript 配置
    React Please wrap your <Route> in a <Routes>
    Typescript node 里使用 multer插件, req 没有 file这个属性
    node 操作mongodb 用 find() 第一个参数无效
    手机请求不到本地服务器 [Error: Network Error]
    模块 ""mongoose"" 没有默认导出。你是想改为使用 "import { Mongoose } from "mongoose"" 吗?
    小程序 自定义 tabBar Component “页面路径“ does not have a method “ 方法名“ to handle event “tap“
    react-native 初始化项目失败
  • 原文地址:https://www.cnblogs.com/buptleida/p/12625827.html
Copyright © 2011-2022 走看看