IO流概述
来源:互联网 发布:北京网络诈骗举报电话 编辑:程序博客网 时间:2024/06/01 09:22
为什么需要IO技术?
在我们日常使用的几乎所有的程序在完成特定的任务都需要与数据存储设备进行数据交换,最常见的数据存储设备主要有磁盘和网络,IO技术就是指应用程序对这些数据存储设备的数据输入和输出。
IO技术是什么?
简单来说,IO技术就是应用程序对存储设备内数据的操作,该操作分为读取和写入。
比如说,打开一个txt文件,这就是个IO技术,应用程序读取硬盘中的数据
IO技术好处是什么?
IO技术的存在,实现了应用程序和存储设备之间数据的交换 ,也可以理解为应用程序可以根据人为发出的指令动态的处理数据存储设备中的数据,实现人机信息的交换。
IO技术操作存储设备内的数据是通过什么来实现的呢?
IO技术操作存储设备内的数据是通过流来实现的,流是一个抽象的概念,代表一串数据的集合,当java程序需要从数据源读取数据时, 就需要开启一个到数据源的流,同样,当程序需要输出数据到目的的时,也需要开启一个流,流的创建是为了更方便的处理数据的输入和输出。
怎么样理解流?
可以把数据流比喻成现实生活中的水流,每户人家都需要自来水,就需要在家喝自来水厂之间建一根水管,这样水厂的水才能通过水管流到家中;
自来水厂就是数据源(数据存数设备),家就是应用程序,水管就是读取方法,水流就是流,数据就是水。
应用程序要读取数据源中的数据,存储设备中的数据通过水流沿着水管就流到了应用程序中了。
流的结构:
字节流
字符流
输入流
InputStream
Reader
输出流
OutputStream
Writer
文件流:
字节流
字符流
输入流
FIleInputStream
FileReader
输出流
FileOutputStream
FileWriter
专门用于操作数据源中文件的流
缓冲区:
缓冲区的作用:
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要先有流对象。
缓冲区的分类:
字节流
字符流
输入流
BufferedInputStream
BufferedReader
输出流
BufferedOutputStream
BufferedWriter
BufferedReader中特有的一次读一行的读取方法:readLine()方法,返回null时,表示读到文件末尾
注:readLine()方法返回的时候只返回回车符之前的数据内容并不能返回回车符,通俗来说,
readLine()方法读取不了回车符,读取文件内容时换不了行
解决readLine()读取文件换不了行方法: newLine() 换行,在每次读一行后调用换行方法,继续读这样就按照原文本格式把文件中数据读出来了。
转换流:
读取转换流:
InputStreamReader
字节流通向字符流的桥梁
写入转换流:
outputStreamWriter
字符流通向字节流的桥梁
打印流:
字节打印流
printStream
字符打印流
printWriter
合并流:SequenceInputStream类
合并流又称序列流,合并流思想:有很多的源和同一个目的相连,比如说源1,源2,源3,同时和目的1相连,合并流将源1,源2,源3作为对象分装到集合中,将集合放入SequenceInputStream(List)中,将SequenceInputStream类对象,作为源4,和目的1相连,这样就不用创建4个流和目的1相连,只需源4和目的间创立一个流相连即可,提高了效率
对象流:
对象输入流
ObjectprintStream
对象输出流
ObjectprintWriter
管道流:
管道输入流
PipedInputStream
管道输出流
PipedOutputStream
随机存取文件流:
随机访问文件,自身具备读写的方法,该类不算是IO体系中子类,而是直接继承Obje类,但是它是IO包中的成员,因为具备读和写的功能,内部分装了一个数组,而且通过指针对数组元素进行操作。
流操作的基本规律:4个明确来完成
1.明确源和目的
源:输入流 Reader InputStream
目的:输出流 Writer OutputStream
2.明确操作数据是否是纯文本
是: 字符流
否:字节流
3.体系明确后,明确使用哪个具体对象
4.明确是否需要提高效率
字节流
字符流
输入流
BufferedInputStream
BufferedReader
输出流
BufferedOutputStream
BufferedWriter
IO流应用实例:
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Copy {/** *拷贝文件步骤: * 1.创建一个文件B,用于存储读取A文件内数据 * 2.定义读取流和A文件关联 * 3.定义数组,作为读取流和写入流之间联系的桥梁 * 4.通过不断的读写完成数据存储 * 5.关闭流资源 */public static void main(String[] args) {FileWriter fw=null; //定义写入流FileReader fr=null; //定义读取流try { fw=new FileWriter("e://hello.txt"); //创建写入流 fr=new FileReader("f://demo.txt"); //创建读取流 char [] buf=new char[1024]; //创建数组作为连接写入流与读取流之间的联系桥梁 int len=0; //数组长度变量 while((len=fr.read(buf))!=-1){ //将读取的元素存到数组中 fw.write(buf, 0, len); //将数组中的元素写入到写入流中 } } catch (IOException e) {System.out.println("拷贝文件失败");e.printStackTrace();}finally{if(fw!=null){try {fw.close(); //将写入流中的数据冲入到保存区域并关闭写入流} catch (IOException e) {System.out.println("关闭写入流失败。。。");e.printStackTrace();}if(fr!=null){try {fr.close();} catch (IOException e) {System.out.println("关闭读取流失败。。。");e.printStackTrace();}}}}}}import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class CopyPhotos {/** * 复制一个图片: * 1.用字节读取流和图片关联 * 2.用字节写入流对象创建一个图片文件,用于存储获取到得图片数据 * 3.通过循环读写,完成数据的存储 */public static void main(String[] args) { FileOutputStream fos=null; //定义字节流 FileInputStream fis=null; try { fis=new FileInputStream("c://a.jpg"); fos=new FileOutputStream("d://b.jpg"); //定义数组,作为两个字节流之间的中转站 byte[] buf=new byte[1024]; int len=0; while((len=fis.read(buf))!=-1){ //循环读写,完成数据的存储 fos.write(buf,0,len); } } catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{ //释放流资源 if(fis!=null){ try {fis.close();} catch (IOException e) {e.printStackTrace();} } if(fos!=null){ try {fos.close();} catch (IOException e) {e.printStackTrace();} } }}}import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Copy {/** * 复制一个MP3文件 * 1.用字节读取流和MP3文件关联 * 2.用字节写入流对象创建一个MP3文件,用于存储获取到得图片数据 * 3.通过循环读写,完成数据的存储 */public static void main(String[] args) {FileInputStream fis=null; //操作数据不是纯文本定义字节流FileOutputStream fos=null;BufferedInputStream bufis=null; //定义缓冲区BufferedOutputStream bufos=null;long start=System.currentTimeMillis(); //复制文件开始时间try {fis=new FileInputStream("c://a.mp3"); //读取,写入文件fos=new FileOutputStream("d://b.mp3");bufis=new BufferedInputStream(fis);bufos=new BufferedOutputStream(fos);int len=0;while((len=bufis.read())!=-1){ bufos.write(len);}long end=System.currentTimeMillis(); //复制文件结束时间System.out.println(end-start+"毫秒"); //复制文件花费上时间} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{ //关闭流资源if(bufis!=null){try {bufis.close();} catch (IOException e) {e.printStackTrace();}}if(bufos!=null){try {bufos.close();} catch (IOException e) {e.printStackTrace();}}}}}
- IO流(File概述)
- IO流概述
- IO流概述
- IO流-概述-FileWriter
- IO流--概述
- 10026---IO流--概述
- IO流解析概述
- IO流--概述
- IO流(一)概述
- IO流_ IO流技术概述
- java.io阻塞io流概述
- java基础--IO流概述
- Java IO流(概述)
- 黑马程序员--IO流概述
- Java IO流框架概述
- IO概述
- IO概述
- IO流(概述字节流字符流)
- 思维导图
- 深入理解Ajax原理
- Android设备管理器漏洞
- 推荐8款免费的 Web 安全测试工具
- UNIX网络编程卷一 笔记 第五章 TCP客户/服务器程序示例
- IO流概述
- Seam的安全框架(一)——授权
- android开发入门-3 (使用剪切板传递数据)
- linux杀死指定进程的命令
- Seam的安全框架(二)——授权
- Seam的安全框架(三)——授权
- 把结果集放到临时表中的示例代码(使用游标)
- Haskell hoogle使用指南
- UNIX网络编程卷一 笔记 第四章 基本TCP套接字编程