过滤流:

IO流按功能分类可以分为节点流和过滤流,节点流是用来直接操作目标设备的流,比如我们前面介绍的FileReader、FileWriter、FileInputStream、FileOutputStream,而过滤流是对应已存在的流进行包装,以提供更强大和灵活的读写功能。

转换流:

将字节流和字符流进行相互转换的高级流:
InputStreamReader :将字节输入流转换为字符输入流
OutputStreamWriter:将字节输出流转换成字符输出流

public class OutputStreamWriter extends Writerpublic OutputStreamWriter(OutputStream out) {super(out);try {//设定编码的过程
se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);} catch (UnsupportedEncodingException e) {throw new Error(e);}}

通过研究FileReader的实现

public class FileReader extends InputStreamReader {public FileReader(String fileName) throws FileNotFoundException {super(new FileInputStream(fileName));}

FileReader实现是继承自InputStreamReader转换流,转换流的构造使用到FileInputStream字节输入流,FileReader的实现是将读取到的字节流通过转换流(本质是通过编码器将字节按照对应的编码表:ASCII、GBK、UTF-8)将其解析为我们能够识别的文本内容

缓冲流:

提高IO的读取速度
字节缓冲流:BufferInputStream、BufferOutputStream
字符缓冲流:BufferReader、BufferWriter

public BufferedReader(Reader in, int sz) {//需要传入一个Reader对象,sz是缓冲容量默认为:defaultCharBufferSize = 8192;super(in);if (sz <= 0)throw new IllegalArgumentException("Buffer size <= 0");this.in = in;cb = new char[sz];nextChar = nChars = 0;}

特有方法:
BufferWriter
void newLine() throws IOException ;根据当前系统,写入一个换行符
BufferReader
String readLine() throws IOException //读取文本中一行内容

RandomAccessFile:

RandomAccessFile既可以读取文件内容,也可以向文件输出数据。同时,RandomAccessFile支持“随机访问”的方式,程序也可以直接跳转到文件的任意地方来读写数据。

RandomAccessFile的构造函数

mode:指定RandomAccessFile的访问模式,一共有4种模式。

**"r" : ** 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw": 打开以便读取和写入。
"rws": 打开以便读取和写入。相对于 "rw","rws" 还要求对“文件的内容”或“元数据”的每个更新都同步写入到基础存储设备。
"rwd" : 打开以便读取和写入,相对于 "rw","rwd" 还要求对“文件的内容”的每个更新都同步写入到基础存储设备。
 public RandomAccessFile(String name, String mode)throws FileNotFoundException{this(name != null ? new File(name) : null, mode);}
public RandomAccessFile(File file, String mode)throws FileNotFoundException//抛出IO异常{this(file, mode, false);}private RandomAccessFile(File file, String mode, boolean openAndDelete)throws FileNotFoundException{String name = (file != null ? file.getPath() : null);int imode = -1;if (mode.equals("r"))imode = O_RDONLY;else if (mode.startsWith("rw")) {imode = O_RDWR;rw = true;if (mode.length() > 2) {if (mode.equals("rws"))imode |= O_SYNC;else if (mode.equals("rwd"))imode |= O_DSYNC;elseimode = -1;}}if (openAndDelete)imode |= O_TEMPORARY;if (imode < 0)throw new IllegalArgumentException("Illegal mode \"" + mode+ "\" must be one of "+ "\"r\", \"rw\", \"rws\","+ " or \"rwd\"");SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(name);if (rw) {security.checkWrite(name);}}if (name == null) {throw new NullPointerException();}if (file.isInvalid()) {throw new FileNotFoundException("Invalid file path");}fd = new FileDescriptor();fd.attach(this);path = name;open(name, imode);FileCleanable.register(fd);   // open sets the fd, register the cleanup}

RandomAccessFile的特有方法:

long getFilePointer( ):返回文件记录指针的当前位置
void seek(long pos ):将文件指针定位到pos位置

RandomAccessFile练习:

在指定文件的指定位置插入指定数据:

public static void indexAdd(String puth,Long index,String date) throws IOException {File file = new File(puth);if(!file.exists()){throw new IOException();}RandomAccessFile accessFile = null;FileOutputStream stream =null;FileInputStream stream1 = null;try {accessFile = new RandomAccessFile(file,"rw");accessFile.seek(index);stream = new FileOutputStream(file.getParent()+ File.separator + "tmp.txt",true);byte[] bytes = new byte[100];int i ;while ((i=accessFile.read(bytes))!= -1){stream.write(bytes,0,i);}accessFile.seek(index);accessFile.writeUTF(date);stream1 = new FileInputStream(file.getParent() + File.separator + "tmp.txt");while ((i=stream1.read(bytes))!= -1){accessFile.write(bytes,0,i);}new File(file.getParent() + File.separator + "tmp.txt").deleteOnExit();}catch (Exception e){e.printStackTrace();}finally {if (accessFile !=null) accessFile.close();if (stream!=null) stream.close();if (stream1!=null) stream1.close();}}

IO流之过滤流介绍:相关推荐

  1. JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流

    JAVA IO流 一.相关概念 1.分类: 区别和联系 代码 嵌套的IO流关闭的问题 一.相关概念 I/O流: Input/Output Stream,文件输入输出流. 1.分类: 输入流 和 输出流 ...

  2. Java I/O流(File、字节流、字符流、过滤流、对象流)详解

    File以及I/O流 一.File类的使用 java.io.File类 代表硬盘上的一个文件或者目录 java.io.File类作用: 每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文 ...

  3. java字符流的父类_Java基于代码实战的字符流父类、字符转换流、缓冲字符流、过滤流...

    1. Java输入输出(I/O)流的知识回顾: 补充:因为这篇文章是基于上一篇的延续,因此将上一篇进行简单的回顾,以便理解本节内容. 1)输入输出(I/O)流分类:共分为字节型输入输出流和字符型输入输 ...

  4. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流

    一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...

  5. stream流去除对象的值_I/O流(过滤流、对象序列化、字符流)

    过滤流基础 Data Stream 首先我们来介绍一对过滤流:DataInputStream 和 DataOutputStream.这两个类有什么作用呢?首先来思考下面的需求:假设,要把一个 doub ...

  6. java printwriter实例_PrintWriter做过滤流+FileWriter案例分析

    package com.mstf.ui; import java.io.*; public class TestWriter { public static void main(String args ...

  7. java中过滤流_第十四讲 Java中的字节流和过滤流

    第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...

  8. Java IO流 - 缓冲流的详细使用介绍

    文章目录 缓冲流 缓冲流概述 字节缓冲流 字符缓存流 缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流.或者高级流.之前学习的字节流和字符流可以称为原始流. 作用:缓冲流自带缓冲区.可以提高原始字 ...

  9. java基础学习_IO流03_字符流、IO流小结、案例_day21总结

    java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...

最新文章

  1. Hyper-V Server 2008系统管理实战
  2. mysql异机还原_利用RMAN进行异机还原(目录相同)
  3. python必备基础代码-Python初学者必会的3款代码编辑器
  4. APC UPS 网络管理卡(型号apc ap9631)的配置
  5. 吴恩达机器学习笔记七_应用机器学习的建议
  6. 汇编语言8086笔记
  7. 智慧职教云答案在哪里找_云课堂智慧职教答案哪里找?
  8. 访问oracle索引需要什么权限,Oracle索引 权限
  9. 映美精LoadDeviceStateFromFile问题
  10. 防火墙OPNsense安装
  11. 编程吸金榜:你排第几?网友神回应了 !
  12. Pytorch下基于lstm的股价预测
  13. CentOS 配置 NodeBB
  14. 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
  15. 『数据分析』使用python进行同期群分析
  16. matlab 毕业答辩,MATLAB的答辩.ppt
  17. 中国真空退火炉行业市场供需与战略研究报告
  18. 林大OJ--2031 凯撒密码
  19. 10个SEO 写作的必读小技巧!包你读完写更好创作
  20. ansible软件下载

热门文章

  1. 转:ESRI矢量数据格式简介
  2. 位运算模块mBit.bas
  3. BZOJ 1084: [SCOI2005]最大子矩阵
  4. Linux操作命令(四)
  5. XtraBackup出现 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
  6. 探寻新的治疗方法,研究人员用VR可视化DNA结构
  7. BZOJ 4174 tty的求助 莫比乌斯反演
  8. iOS 组件化 —— 路由设计思路分析
  9. Verlet-js JavaScript 物理引擎
  10. MVC 自定义IModelBinder实现json参数转Dictionarystring, string