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=new
OutputStreamWriter(
new
FileOutputStream(file));
将字节输入流变为字符输入流Reader read=new
InputStreamReader(
new
FileInputStream(file));
new
InputStreamReader(
new
FileInputStream(file));
那有一个问题,神恶魔时候才要用到转换流呢:当字节和字符之间有转换动作时和流操作的数据须要编码或者解码的时候。
以内容为输出输入目的地,使用内存操作流
ByteArrayInputStream 主要将内容写入内容
ByteArrayOutputStream 主要将内容从内存输出
内容操作流一般使用来生成一些暂时信息採用的,这样能够避免删除的麻烦
合并流 SequenceInputStream
SequenceInputStream主要用来将2个流合并在一起。比方将两个txt中的内容合并为另外一个txt。
PushBackInputStream回退流:能够把读取进来的某些数据退回到数据缓冲区
BufferedReader仅仅能接受字符流的缓冲区,由于每个中文须要占领两个字节,所以须要将System.in这个字节输入流变为字符输入流,採用:
BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); |
new
Scanner(System.in);
// 读一个整数
int
temp = 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流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
随机推荐
- [转]60fps on the mobile web
Flipboard launched during the dawn of the smartphone and tablet as a mobile-first experience, allowi ...
- fixed说明
http://blog.163.com/hc_ranxu/blog/static/367231822013102265151785/
- UI Framework-1: Ash Color Chooser
Ash Color Chooser Overview This document describes how to achieve <input type=”color”> UI in C ...
- require(): open_basedir restriction in effect. File
新安装的 lnmp 环境,将项目放上报 require(): open_basedir restriction in effect. File 的错误! 错误日志显示,访问脚本不在 open_base ...
- C#中使用Dictionary实现Map数据结构——VC编程网
转载自: http://blog.51cto.com/psnx168 在VC中使用过CMap以及在Java中使用过Map的朋友应该很熟悉,使用Map可以方便实现基于键值对数据的处理,在C#中,你就需要 ...
- 人在IT,关于计算机专业的杂谈PPT
- numpy中list array matrix比较
用python中的numpy包的时候不小心踩了array和matrix的大坑,又引申一下比较list array matrix之间的异同.数据结构(Data Structures)基本上人如其名——它 ...
- 编码问题异常处理:UnicodeDecodeError: 'gbk' codec can't...
作为编码问题集合: 2)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start by ...
- CMSIS-RTOS 信号量
信号量Semaphores 和信号类似,信号量也是一种同步多个线程的方式,简单来讲,信号量就是装有一些令牌的容器.当一个线程在执行过程中,就可能遇到一个系统调用来获取信号量令牌,如果这个信号量包含多个 ...
- linux学习之多高并发服务器篇(三)
UDP多播服务器 多播 组播组可以是永久的也可以是临时的.组播组地址中,有一部分由官方分配的,称为永久组播组.永久组播组保持不变的是它的ip地址,组中的成员构成可以发 生变化.永久组播组中成员的数量都 ...