有趣的Java 8
来源:互联网 发布:夏普网络扫描仪工具 编辑:程序博客网 时间:2024/06/10 00:07
1. 读取文件
我新建了一个文本文档,内容如下:
abcabc
然后运行这段代码:
String filePath = "C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"; try (FileInputStream fileInputStream = new FileInputStream(filePath)) { while (true) { int result = fileInputStream.read(); System.out.println(result); if (result == -1) { break; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { System.out.println("读入或关闭流时发生IO异常,谁知道怎么处理吗?"); }
9798991310979899-1
分别打印了 a b c 对应的 ASCII 值, 13 和 10 是回车键和换行键,-1 应该就是末尾标识。
2. 单字节读取和多字节读取
我把文本文档中数据,经过无数次复制粘贴后,通过单字节读取的方式,完全读入花费约 21 秒的时间。
然后将代码稍作改动:
byte[] buffer = new byte[20]; while (true) { int result = fileInputStream.read(buffer); if (result == -1) { break; } }
结果只花费了 1 秒左右。
我有做了几个测试,缓存区 10字节 花费 2 秒左右,缓冲区 200字节 花费 0.1 秒左右。
这说明了,对底层来说,单字节读取和多字节读取耗时是差不多的。
所以使用缓冲区是个好主意。
3. 多字节读取
将文本文档内容改为:
abcdefg
将代码改为:
byte[] buffer = new byte[10]; while (true) { int result = fileInputStream.read(buffer); if (result == -1) { break; } else { System.out.println("读取 " + result + "字节"); } for (byte b : buffer) { System.out.println(b); } }
打印如下:
读取 10字节97989913101001011021310读取 1字节103989913101001011021310
第二次读取一个字节,覆盖了 buffer[0],其他不变。
4. FileReader 和 BufferReader
FileReader 用于多 char 读入,或者说字符流。
BufferReader 做了二级的缓存,具体不知,1G 以内数据读取中也没看出效率上的优势。
补充阅读:
http://www.cnblogs.com/skywang12345/p/io_23.html
0 0
- 有趣的Java 8
- 有趣的Java 1
- 有趣的Java 2
- 有趣的Java 3
- 有趣的Java 6
- 有趣的Java 7
- 有趣的Java 9
- 有趣的Java 10
- JAVA-有趣的GuessBirthday
- 有趣的Java-J01
- 有趣的Java-J02
- 有趣的Java-J03
- 有趣的Java-J04
- 有趣的Java-J05
- Java阴差阳错的有趣历史。
- 一道有趣的java题
- 一些有趣的JAVA问题!
- java有趣的经典题目
- Cut Ribbon codeforce
- 斐波那契数列的递归与非递归算法实现及其时间复杂度
- 数组最长递增子序列(LIS)---MS
- VC++项目中firebreath生成的代码中如何加入jsoncpp库
- 机器学习算法基础概念学习总结
- 有趣的Java 8
- Silverlight中用户直接退出浏览器时如何判断用户离线
- itextpdf输出PDF笔记
- Java学习之反射机制
- Climbing Stairs
- 怎样读一篇论文
- js实现div弹框和关闭
- UML之状态图
- Thread - JConsole