Java之IO(零)总结
转载请注明原出处:http://www.cnblogs.com/lighten/p/7274378.html
1.前言
本章是对之前所讲述的整个Java的IO包的一个总结,抽出个人认为比较重要的知识点来进行归纳。
2.体系
上面四幅图就是Java的IO包的继承关系了,这些类大致上都在其它的章节中介绍过一次,下列出我写的相关内容的目录。
Java之IO(一)InputStream和OutputStream
Java之IO(二)BufferedInputStream和BufferedOutputStream
Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream
Java之IO(四)DataInputStream和DataOutputStream
Java之IO(六)FileInputStream和FileOutputStream
Java之IO(七)ObjectInputStream和ObjectOutputStream
Java之IO(八)PipedIutputStream和PipedOutputStream
Java之IO(十一)BufferedReader和BufferedWriter
Java之IO(十二)CharArrayReader和CharArrayWriter
Java之IO(十三)File、Filter、Piped、String和InputStreamReader与OutputStreamWriter
这些内容大体都描述的比较无聊,中间有些使用的小例子,还有些测试说明。写的不好,在下面会将其中比较有用的信息提取出来,有兴趣看的也可以看看。
3.流说明
此节主要明确流的各个方法的使用。
3.1 InputStream
输入字节流的规定方法就是上图所给,其所有子类和实现类要满足下面的方法说明才行。
read():读取一个字节,并返回。如果读到末尾返回-1,其读取的范围是0~255。
read(byte[],int,int):读取指定数量的字节,并赋给所给从指定下标开始的数组,返回实际读取并赋值的数量。
skip(long):跳过指定数量的字节,返回实际跳过的字节数。
available():返回流预计剩余可读取的字节数。
close():关闭该字节流
mark(int):设置在标记位置失效之前可以读取的字节的最大限制,前提是markSupported为true,支持标记。在有些流中这个传递的参数没有意义。
reset():重置流到标记的位置,前提是支持标记且标记过了。
markSupported():判断这个流是否支持标记
3.2 OutputStream
write(int):写入一个字节
write(byte[],int,int):写入所给字节数组指定下标开始的指定数量的字节
flush:将缓存的数据写入指定源。不保证一定写入了,比如文件流,只保证通知了操作系统写入数据到磁盘,不保证这些数据已经被写入磁盘。
close:关闭流。
3.3 Reader
与InputStream方法类似,不同之处在于:1.多了一个ready()方法判断流是否准备好,可以进行读取了。2.其抽象方法是read(char[],int,int),read方法是有实现的,InputStream是read方法是抽象的。
3.4 Writer
writer的相关方法和OutputStream的也十分相似,并没有什么值得一提的内容。
4.其它要点
1、第7篇测试了一下一个文件写入多个对象的问题,并没有发现不能读取,大家可以试试,暂不清楚是否是JDK1.8修复了这个问题,还是本就不存在此问题。
2、第8篇对管道流进行了测试,想了解的可以具体看看。
3、第9篇末尾讨论了一下为何流的结束以-1来判断,读取的值难道不会正好是-1吗?那里写的有点乱,这里简单说明一下:不管用什么作为结束判断标识符,都无法避免读取的和判断的标志符相同的可能,判断流是否结束都不是以-1来判断的,而是流结束了才会给-1这个标识符,先知道结束然后才给的标志,而不是以预计的结束标识符来判断是否结束。至于读取的字节为何不会与标志符相同,在第9篇的一个实验已经说明了,利用了编码的小特性,流的接口也说明了,所有的字节都被限制在了0~255,返回了-1自然不会是读取到的。读取的-1实际上被转成了在0~255范围内的其它值,也可以很方便的通过编码转回来。
4、第14篇介绍了两个实用的类RandomAccessFile和StreamTokenizer。可以看看。
Java之IO(零)总结的更多相关文章
- Java的IO系统
Java IO系统 "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务." 由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的.其中最大的 ...
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- 【Java】Java中的零拷贝
物理内存 计算机物理内存条的容量,比如我们买电脑会关注内存大小有多少G,这个容量就是计算机的物理内存. 虚拟内存 操作系统为每个进程分配了独立的虚拟地址空间,也就是虚拟内存,虚拟地址空间又分为用户空间 ...
- java的IO流
java的IO流继承四大抽象类分别是字节流 inputStream outputStream与字符流 read write.怎么理解记忆很重要. 直接连接读写对象的是结点流,例如对文件读取字节类的名字 ...
- java之io之File类的list()方法过滤目录的使用
java的io的知识中,File类必须掌握.File类是对文件或者文件夹的封装.它本身并不能对所封装的文件进行读写,它封装的只是文件或文件夹的周边知识,比如 大小啦,创建日期啦,路径啦等等. 如果Fi ...
- Java 新IO
NIO提供全新的底层I/O模型.与最初的java.io包中面向流(stream-oriented)概念不同,NIO采用了面向块的概念(block-oriented).在尽可能的情况下,I/O的操 ...
- JAVA中IO总结
JAVA中IO流主要分为两大类: 字节流:InputStream+OutputStream 字符流:Reader+Writer 字节流: InputStream是所有字节输入流的父类 OutputSt ...
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- 【Java】IO流简单分辨
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...
随机推荐
- Strut2的配置文件strust.xml报错:Package Action extends undefined package struts-default
struts.xml的警告信息,是需要联网验证dtd是否符合规范,只要配置成本地的dtd就会消失, 配置方式请看: 详细请看http://www.cnblogs.com/liuyangfirst/p/ ...
- POJ 3621 Sightseeing Cows (bellman-Ford + 01分数规划)
题意:给出 n 个点 m 条有向边,要求选出一个环,使得这上面 点权和/边权和 最大. 析:同样转成是01分数规划的形式,F / L 要这个值最大,也就是 G(r) = F - L * r 这个值为0 ...
- UVa 10382 Watering Grass (区间覆盖贪心问题+数学)
题意:有一块长为l,宽为w的草地,在其中心线有n个喷水装置,每个装置可喷出以p为中心以r为半径的圆, 选择尽量少的装置,把草地全部润湿. 析:我个去啊,做的真恶心,看起来很简单,实际上有n多个坑啊,首 ...
- JAVA开发常用计算机命令
系统常用命令 win+r > control (可进入控制面板,管理工具,服务) win+r > cmd > systeminfo (x86-based 指32位系统,x86-64 ...
- faceswap使用手冊
cd faceswap cd faceswap-master python faceswap.py gui Notice: This repository is not operated or mai ...
- 2013多校联合3 G The Unsolvable Problem(hdu 4627)
2013-07-30 20:35 388人阅读 评论(0) 收藏 举报 http://acm.hdu.edu.cn/showproblem.php?pid=4627 The Unsolvable Pr ...
- ZUFE2389: Occult的卡片升级计划(DP) 2016-05-17 23:12 113人阅读 评论(0) 收藏
2389: Occult的卡片升级计划 Description Occult喜欢玩一款手游,手游中有很多好看的卡片.他想要升级这些卡. 现在他有m块经验石,目标是强化一张卡片,卡片最开始的时候是0级, ...
- DDA_为微分绘制直线算法
DDA_为微分绘制直线算法 以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)). 即步进坐标增长1, 另一坐标增长K或者1/k. 程序如下: //数值微分算法D ...
- 使用nexus来搭建Nuget私服
近期在搭建nuget私服.选择nexus这个产品.nexus支持npm,.nuget等,功能比较强大. 前言 博主使用centos7.5来搭建nexus,遇到了不少的问题.最后还是搞定了. 1:下载n ...
- Wpf中显示Unicode字符
1. 引言 今天在写一个小工具,里面有些字符用Unicode字符表示更合适.但是一时之间却不知道怎么写了.经过一番查找,终于找到了办法.记到这里,一是加深印象,二则以备查询. 2. C#中使用Unic ...