栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 学习笔记 - IO篇:常见的【流Stream】【通道Channl】以及相互关系

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 学习笔记 - IO篇:常见的【流Stream】【通道Channl】以及相互关系

Java 学习笔记 - IO篇:常见的【流Stream】【通道Channl】以及相互关系
  • 常见流
    • 流的分类
      • 节点流
      • 处理流
    • 流之间的关系
  • 流的基本操作
    • 读操作
    • 写操作
    • mark、reset 操作
    • 检测、判断
  • 通道
  • 参考资料

常见流
分类字节输入流字节输出流字符输入流字符输出流
流-抽象基类InputStreamOutputStreamReaderWriter
节点流(文件流)FileInputStream
RandomAccessFile
FileOutputStream
RandomAccessFile
FileReaderFileWriter
节点流(数组流)ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
节点流(管道流)PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
节点流(字符流)  StringReaderStringWriter
处理流-抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputStreamWriter
数据流DataInputStreamDataOutputStream 
格式化输出流 PrintStream PrintWriter
对象流ObjectInputStreamObjectOutputStream  
序列流SequenceInputStream   
ParsingPushbackInputStream
StreamTokenizer
 PushbackReader
LineNumberReader
 

★

流的分类
分类方式说明
顶层规划抽象基类:作为所有流的抽象基类,定义流操作的API接口;
功能流抽象基类:啥都没做,所有方法直接调用父类。设计意图:作为所有功能类的基类,大它都继承它去扩展。
按方向输入流:将数据读进内存;
输出流:从内存当数据向外写出到目标位置。如:磁盘、网络。
按数据类型字节流:读写字节数据;
字符流:读写字符数据。(底层还是字节流)
按功能节点流:从特定数据源读写数据;
处理流:为节点流添加具体的处理能力。
节点流
  • 文件流:从文件生成流。
  • 随意读写文件流:从文件生成流,并且能读能写,随便指定读写从哪开始。
  • 数组流:从数组生成流。
  • 管道流:从管道生成流。
  • 字符流:其源为一个字符串的字符流。为字符串提供流式读写的能力。
处理流
  • 包装流(缓冲流、处理流):封装抽象基类流的实现。
    1. 默认带一个8192的字节或字符数组作为缓冲区。
    2. 继承处理流-抽象基类,并且包装一个流-抽象基类的实现类。
    3. 因为有缓冲区,获得mark、reset能力。
  • 转换流:把字符流封装为字符流,此过程可以指定字符集。
  • 其他处理流:针对具体功能的处理。
流之间的关系
  1. 从流的名字可以看出:大多数流有方向。很多流是成对出现的,它们经常会配合使用。
  2. 从设计角度看,类之间通过层层包装来针对具体需求增强功能
  3. 常规读字节我们一般用BufferedInputStream。
FileInputStream fis = new FileInputStream("E:\in.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
  1. 常规读字符我们一般用BufferedReader。
FileInputStream fis = new FileInputStream(new File("E:\in.txt"));
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
流的基本操作 读操作

流-抽象基类InputStreamorOutputStream定义的标准读操作所有读取流都支持。
其他处理流,不过是在此基础上提供针对特定操作的便捷方法。比如:ObjectInputStream支持按类型读取变量。BufferedReader支持按行读取。

操作说明
abstract int read()从输入流中读取数据的下一个字节/字符。
int read(T[] b)从输入流中读取一定数量的字节/字符,并将其存储在缓冲区数组 b 中。
int read(T[] b, int off, int len)将输入流中最多 len个数据字节/字符读入数组。
写操作
操作说明
abstract void write(int b)将指定的字节/字符写入此输出流。
void write(byte[] b)将 b.length 个字节从指定的 字节/字符 数组写入此输出流。
void write(byte[] b, int off, int len)将指定 字节/字符 数组中从偏移量 off 开始的 len 个字节写入此输出流。
void flush()刷新此输出流并强制写出所有缓冲的字节/字符。
mark、reset 操作

mark、reset 是针对缓冲区来工作的,所以只有存在缓冲区的流才可能支持此操作。

操作说明
void mark(int readlimit)在此输入流中标记当前的位置。
void reset()将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
boolean markSupported()测试此输入流是否支持 mark 和 reset 方法。
long skip(long n)跳过和丢弃此输入流中数据的 n 个字节/字符。
检测、判断
操作说明
int available()返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节/字符数。
void close()关闭此输入流并释放与该流关联的所有系统资源。
关闭外层流会自动关闭它包装的内层流。
其实Java7之后,建议直接放 try(Closeable) 里。
通道 参考资料

笑虾:Java 学习笔记 - 文件IO篇:读写文本文件txt
笑虾:Java 学习笔记 - 复制文件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014788.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号