Java io流的学习
近期几天细致学了Java的io流。本来是打算看视频通过视频来学习的。但是后来发现事实上视频看不怎么懂也感觉不是非常easy上手,所以就通过百度和api文档学习了Java的io流
io流能够有两个分类,一个是字节流和字符流,还有一个是输入流和输出流。
先说说字节流和字符流吧:首先实际上字节流在操作的时候是不会用到缓冲区的。是文件本身的直接操作的,可是字符流在操作的时候下会用到缓冲区的。是通过缓冲区来操作文件的。字节流与字符流的其它差别呢就是读写单位不同,毫无疑问,字符流是以字符为单位。字节流是以字节为单位(一个字节8个bit)。由此可知两种的处理对象不同,字节流能处理全部类型的数据,而字符流仅仅能处理字符类型的数据。所以我们能够得到一个结论。那就是仅仅要是处理纯文本数据。就优先考虑使用字符流,除此之外使用字节流。
然后就要说一说输入流和输出流。老实说,从学C语言那时候開始我就输入和输出,output和input非常混乱也非常不明确。须要不断去接触才更加可以牢记差别吧。输入呢通常是指从外部文件(如硬盘,键盘等)获取数据,而输出呢则是指从程序本身向外部输出数据(如写入文件,显示都屏幕上)。
而输入流和输出流还有还有一个差别。那就是对输入流仅仅能进行读操作,而对输出流仅仅能进行写操作。
说完这两个大分类。我们能够来了解下当中更具体的一些内容,看看一个类图吧
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuX2hhaXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
由继承图看出来,字符输入流Reader是全部的字符输入流的父类。PIpedReader主要是能够通过与其它线程建成的管道读取数据。
而InputStreamReader是一个连接字节流和字符流的桥梁,能够将字节流转变为字符流。
字符输出流Writer是全部的字符输出流的父类。其它子类分别与Reader的各个子类相相应。

输入字节流InputStream是全部的输入字节流的父类。ByteArrayInputStream、StringBufferInputStream、FileInputStream是分别从相应文件读入数据
而PipedInputStream 是从与其他线程共用的管道中读取数据。
输出字节流OutputSteam 是全部的输出字节流的父类。
其它分别与InputSteam的子类相互相应。

整个IO类中除了字节流和字符流还包含字节和字符转换流。
OutputStreramWriter将输出的字符流转化为字节流
InputStreamReader将输入的字节流转换为字符流
将字节输出流转化为字符输出流Writer out=newOutputStreamWriter(newFileOutputStream(file));
将字节输入流变为字符输入流Reader read=newInputStreamReader(newFileInputStream(file));
newInputStreamReader(newFileInputStream(file));
那有一个问题,神恶魔时候才要用到转换流呢:当字节和字符之间有转换动作时和流操作的数据须要编码或者解码的时候。
以内容为输出输入目的地,使用内存操作流
ByteArrayInputStream 主要将内容写入内容
ByteArrayOutputStream 主要将内容从内存输出
内容操作流一般使用来生成一些暂时信息採用的,这样能够避免删除的麻烦
合并流 SequenceInputStream
SequenceInputStream主要用来将2个流合并在一起。比方将两个txt中的内容合并为另外一个txt。
PushBackInputStream回退流:能够把读取进来的某些数据退回到数据缓冲区
BufferedReader仅仅能接受字符流的缓冲区,由于每个中文须要占领两个字节,所以须要将System.in这个字节输入流变为字符输入流,採用:
BufferedReader buf =new BufferedReader( newInputStreamReader(System.in)); |
new Scanner(System.in);
// 读一个整数
inttemp = sca.nextInt(); 查了下api文档关于scanner的内容发现Scanner的參数代表的是数据从哪里扫描,scanner能够接受不论什么的输入流
为System.out.println()重定向输出(能够把向控制台输出改为写入文件操作)
System.err重定向 (能够将错误信息写入文件保存)
在流操作中常常须要用到:和\ 不推荐直接用,最好调用两个常量File.separator(\)与File.pathSeparator(:),这样处理的话跨平台操作会比較兼容
假设想在文件里换行的话。须要使用“\r\n”
Java io流的学习的更多相关文章
- 关于JAVA IO流的学习
初学Java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...
- JAVA.IO流学习笔记
一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
- Java IO流学习总结(1)
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...
- Java IO流学习总结一:输入输出流
Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
随机推荐
- PHP str_replace() 和str_ireplace()函数
PHP str_replace() 和str_ireplace()函数 实例 把字符串 "Hello world!" 中的字符 "world" 替换为 &quo ...
- ★★★【卡法 常用js库】: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度
[卡法 常用js库]: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度 // +---------------------- ...
- nyoj--108--士兵杀敌(一)(区间求和&&树状数组)
士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知 ...
- mysql读写分离的解决方案
来源于网上整理 http://yanwt.iteye.com/blog/1460780 现有三种解决方式实现mysql读写分离 1 程序修改mysql操作类 优点:直接和数据库通信,简单快捷的读写分离 ...
- shell call python
python -c "import os; p=os.getcwd(); print(p);print(p);print(p);print('test over')"
- asp.net网页播放MP4 出错
通过IIS进行添加:单击[开始]→[程序]→[管理工具]→[IIS管 理器],逐步展开“本地计算机”.“网站”,在你的网站上右击,选择[属性],单击“HTTP头”选项卡→单击“MIME类型”按钮,再单 ...
- ASP.NET 部分视图
ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control.我们的页面往往会有许多重用的地方,可以进行封装重用. 使用部分视图有以下优点: 1. 可以简写代码. ...
- codeforces 400 C Inna and Huge Candy Matrix【模拟】
题意:给出一个矩形的三种操作,顺时针旋转,逆时针旋转,对称,给出原始坐标,再给出操作数,问最后得到的坐标 画一下模拟一下操作就可以找到规律了 #include<iostream> #inc ...
- MPP的进化 - 深入理解Batch和MPP优缺点
https://mp.weixin.qq.com/s/scXNfkpjktCZxBg3pYEUUA?utm_medium=hao.caibaojian.com&utm_source=hao.c ...
- 使用物化视图解决GoldenGate不能使用中文表名问题
源端: conn sh/sh create table "学生" ("学号" number primary key,"姓名" varchar ...