Java IO浅谈(个人感觉例子不错,替换流,数组,文件或者大的字符串中的一些字符或者字符串)
2017-03-17 16:30
671 查看
人生之路慢慢长 2017-02-08 18:05
最近在看Java的IO,边学边记录分享下。
根据数据流向不同分为:输入流和输出流
读写单位不同,字节流以字节为单位,字符流以字符为单位
处理对象不同:字节流能处理所有类型数据,字符流只能处理字符类型的数据
字节流操作不会用到缓冲区,是对文件本身的操作,字符流是通过缓冲区来操作文件
在Java中,通信的双方应该是运行在同一进程中的不同线程。
可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。
TokenReplacingReader从标准的Java.io.Reader中读取字符数据,然后你可以从TokenReplacingReader中读取数据,就可以得到用新字符替换过的数据。实际上这里面的处理是:当TokenReplacingReader在数据中找到诸如${tokenName}形式的口令字符串时,就会调用ITokenResolver获取应该要替换成的值来将对应口令字符串部分替换并插入到字符流中。那么ITokenResolver是什么呢?ITokenResolver是一个你可以自己实现的接口,这样的话你自己就可以定义所需要的口令字符串解析器,完成你的替换操作,其中口令字符串是通过ITokenResolver.resolveToken(String
tokenName)方法传入的。
下面是TokenReplacingReader的工作原理图:
TokenReplacingReader能够在字符流中替换字符串
说再多不如看例子:
输入字符串中的两个口令标识符${token1}和${token2}会被value1和JJ ROCKS!!!替换,这些值是由MapTokenResolver返回,其中MapTokenResolver是ITokenResolver的一种通过在Map中查询口令字符串来解析值的实现。
下面来比较下String.replace()和TokenReplacingReader的效能吧,时间复杂度上:
String.replace():O(N * M)
TokenReplacingReader:O(N + M)
效能显而易见。
总之,IO内容还是很多的,就先介绍这么多吧,谢谢大家。
最近在看Java的IO,边学边记录分享下。
IO流的分类
根据数据处理类的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流
字符流和字节流
区别:读写单位不同,字节流以字节为单位,字符流以字符为单位
处理对象不同:字节流能处理所有类型数据,字符流只能处理字符类型的数据
字节流操作不会用到缓冲区,是对文件本身的操作,字符流是通过缓冲区来操作文件
管道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为 数据源以及目标媒介。在Java中,通信的双方应该是运行在同一进程中的不同线程。
可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。
组合流
你可以将流整合起来以便实现更高级的输入和输出操作。比如,一次读取一个字节是很慢的,所以可以从磁盘中一次读取一大块数据,然后从读到的数据块中获取字节。为了实现缓冲,可以把InputStream包装到BufferedInputStream中。TokenReplacingReader
有时你需要替换流,数组,文件或者大的字符串中的一些字符或者字符串,此时你可以使用String.replace()方法,但是对于大数据并且要替换许多处地方,这个方法就不那么好了。因为这个方法在每次替换会创建一个已经替换过字符的新的字符串,多次替换也就会创建多次,显然这份影响效率,那么TokenReplacingReader的重要性就凸显出来啦。TokenReplacingReader从标准的Java.io.Reader中读取字符数据,然后你可以从TokenReplacingReader中读取数据,就可以得到用新字符替换过的数据。实际上这里面的处理是:当TokenReplacingReader在数据中找到诸如${tokenName}形式的口令字符串时,就会调用ITokenResolver获取应该要替换成的值来将对应口令字符串部分替换并插入到字符流中。那么ITokenResolver是什么呢?ITokenResolver是一个你可以自己实现的接口,这样的话你自己就可以定义所需要的口令字符串解析器,完成你的替换操作,其中口令字符串是通过ITokenResolver.resolveToken(String
tokenName)方法传入的。
下面是TokenReplacingReader的工作原理图:
TokenReplacingReader能够在字符流中替换字符串
说再多不如看例子:
输入字符串中的两个口令标识符${token1}和${token2}会被value1和JJ ROCKS!!!替换,这些值是由MapTokenResolver返回,其中MapTokenResolver是ITokenResolver的一种通过在Map中查询口令字符串来解析值的实现。
下面来比较下String.replace()和TokenReplacingReader的效能吧,时间复杂度上:
String.replace():O(N * M)
TokenReplacingReader:O(N + M)
效能显而易见。
总之,IO内容还是很多的,就先介绍这么多吧,谢谢大家。
相关文章推荐
- HW—指定字符替换Java(replace)---动态和静态定义字符串数组;
- Java IO学习【3】IO中异常的抛出/单个字符读取文件、数组读取字符文件
- java IO 基于模板文件替换字符生成word文档
- 浅谈java 字符串,字符数组,list间的转化
- java IO文件操作入门经典例子
- VS 2005(VB.net)的一些个人感觉不错的地方
- java中字符数组和字符串的相互转换
- Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- java连接oracle,取io文件内容,子串替换(原作)!
- java 数组迭代器(或者集合里存放字符串,而不是bean)
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- 实现任意找到一个字符或者字符串将整个字符串分割成若干个字符串保存到字符数组当中
- java关于(io&nio) 的 文件copy例子
- java中替换一些特殊字符的办法
- cpp如何快速安全地将文件读入字符串string或字符数组vector<string>的方法
- 个人感觉不错的Java连接池的实现(转载)
- C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组
- 关于字符串与字符数组的一些小问题
- 替换TXT文件里的字符串,一行一行查找替换,java代码
- java关于(io&amp;amp;nio) 的 文件copy例子