Java中的IO学习总结
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结:
IO流主要用于硬盘、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。根据流向不同,可以分为:输入流和输出流。 其中主要结构可以用下图来表示:

字符流和字节流的主要区别:
1.字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查找指定的编码表,将查到的字符返回。
2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。
IO流又可以分为节点流和处理流两大类
一:节点流类型
该类型可以从或者向一个特定的地点或者节点读写数据。主要类型如下:

二:处理流类型
该类型是对一个已存在的流的链接和封装,通过所封装的流的功能调用实现数据读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象经过其他流的多次包装,叫做流的链接。主要可以分一下几种:
1.缓冲流:BufferedInPutStream/BufferedOutPutStream和BufferedWriter/BufferedReader。它们可以提供对流的操作效率。
写入缓冲区对象:BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));
读取缓冲区对象:BufferedReader bufr=new BufferedReader(new FileReader("buf.txt"));
实际例子写入缓冲区:

该类型的流在读取缓冲区的时候,该对象有一个readLine()方法。如:BufferedReader bufr=new BufferedReader(new FileReader("buf.txt"));此时可以使用:bufr.readLine();依次读一行,当行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null。其原理还是与缓冲区关联的流对象的read方法,只不过每一次读取到一个字符,先不进行具体操作,先进行临时储存,当读取到回车标记时,将临时容器中储存的数据一次性返回。
该类型的流在写入缓冲区的时候,该对象有一个newLine()方法。如:BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));此时可以使用:bufw.newLine();在循环写入的时候,依次换行写入。
2.转换流:InputStreamReader/OutputStreamWriter。该类型是字节流和字符流之间转换的桥梁,该流对象中可以对读取到的字节数据进行指定编码的编码转换。
构造函数主要有:
输入流
InputStreamReader(); //通过构造函数初始化,使用的是本系统默认的编码表GBK。
InputStreamReader(InputStream,String charSet); //通过该构造函数初始化,将字节流转换成字符流并指定编码表。
输出流
OutputStreamWriter(); //通过该构造函数初始化,使用的是本系统默认的编码表GBK。
OutputStreamWriter(OutputStream,String charSet); //通过该构造函数初始化,将字节流转换成字符流并指定编码表。
注意:在使用FileReader操作文本数据时,该对象使用的是默认的编码表,即 FileReader fr = new FileReader("a.txt");与InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));的意义相同。如果要使用指定编码表编码时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,即:
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);
3.数据流:DataInputStream/DataOutputStream该数据流可以方便地对一些基本类型的数据进行直接的存储和读取,不需要进一步进行转换,通常只要操作基本数据类型的数据,就要通过DataStream进行包装。
构造方法:
DataInputStreamReader(InputStream);
DataOutputStreamWriter(OutputStream);
Java中的IO学习总结的更多相关文章
- Java NIO学习系列六:Java中的IO模型
前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- java中的IO流
Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...
- Java中的IO流大体介绍
由于Java中的IO流是在是知识点繁多,所以我大约花了1周的时间将其整理起来.但是整理起来后并不是将完事了,我还是要分字节流和字符流来讲述.然后字节流和字符流中还有是否带有缓冲流. 讲述完IO流后我将 ...
- Java中的IO流,Input和Output的用法,字节流和字符流的区别
Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...
- Java中的IO流(三)
上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...
- Java中的IO流(二)
上一篇<Java中的IO流(一)>把学习IO流的字符流作了一下记录,本篇把字节流记录一下. 一,Java中的字节流 Java中的字节流的操作方式与字符流的操作方式大致相同,连方法名都是类似 ...
- Java中的IO流之输入流|乐字节
亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入 ...
- Java中的IO操作和缓冲区
目录 Java中的IO操作和缓冲区 一.简述 二.IO流的介绍 什么是流 输入输出流的作用范围 三.Java中的字节流和字符流 字节流 字符流 二者的联系 1.InputStreamReader 2. ...
随机推荐
- NoSql中的B-tree、B+tree和LSM-tree
总结: 1.B+树将数据完全排序,读数据时很快,但当要修改数据时,就需要将新入数据下面的数据重新排位,特别是当写入的数据排在较高的位置时,需要大量的移位操作才能完成写入. 2.SLM牺牲部分的读性能, ...
- php json_encode数据格式化2种格式[]和{}
在php中,json格式化数据后,会出现2种形式数据: 1.当array是一个从0开始的连续数组时,json_encode的结果是一个由[]括起来的字符串 $arr = array('a' , 'b' ...
- Scala学习笔记--隐式转换
隐式转换的规则:1.无歧义规则:隐式转换唯有不存在其他可插入转换的前提下才能插入 若编译器有两种方法修正x+y 如convert1(x)+y,convert2(x)+y,会报错2.单一调用规则:只尝 ...
- Spring Data JPA之Hello World
Spring Data Jpa 配置 使用 Spring Data JPA 进行持久层开发需要的四个步骤: 1.配置 Spring 整合 JPA 2.在 Spring 配置文件中配置 Spring D ...
- Android使用xml中定义的动画效果
Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.zqrl_out); animation.setFil ...
- initEvent vs initMouseEvent
var evt = document.createEvent("MouseEvents");evt.initMouseEvent("click", true, ...
- hdu 3461 Code Lock
http://acm.hdu.edu.cn/showproblem.php?pid=3461 并差集和幂取模 这道题主要是求不可操作区间. #include <cstdio> #inclu ...
- Codeforces 245H Queries for Number of Palindromes
http://codeforces.com/contest/245/problem/H 题意:给定一个字符串,每次给个区间,求区间内有几个回文串(n<=5000) 思路:设定pd[i][j]代表 ...
- A51汇编器的解释
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产 ...
- 在C中嵌入汇编
早前公布了C和汇编混编的温度控制器程序,收到一些朋友的询问,他们无法在自己程序中使用我的18B20的汇编子程序或无法正常通过混编后的程序编译. 其实在KEIL中嵌入汇编的方法很简单.如图一,在C文件中 ...