IO流体系总结.docx

上传人:b****4 文档编号:2994732 上传时间:2022-11-16 格式:DOCX 页数:23 大小:27.08KB
下载 相关 举报
IO流体系总结.docx_第1页
第1页 / 共23页
IO流体系总结.docx_第2页
第2页 / 共23页
IO流体系总结.docx_第3页
第3页 / 共23页
IO流体系总结.docx_第4页
第4页 / 共23页
IO流体系总结.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

IO流体系总结.docx

《IO流体系总结.docx》由会员分享,可在线阅读,更多相关《IO流体系总结.docx(23页珍藏版)》请在冰豆网上搜索。

IO流体系总结.docx

IO流体系总结

IO流总结

IO(InputOutput)流

●IO流用来处理设备之间的数据传输

●Java对数据的操作是通过流的方式

●Java用于操作流的对象都在IO包中

●流按操作数据分为两种:

字节流与字符流。

●流按流向分为:

输入流,输出流。

输入流和输出流的流向的理解?

流就是处理数据的一种方式或者一种手段,或者理解为一种数据流。

从硬盘已有的数据读取出来放内存里面的这个过程就是输入流。

把内存中的数据存储到硬盘中的这个过程就是输出流。

简单理解就是:

以内存为中心。

什么时候使用流对象?

操作设备上的数据或操作文件的时候可以使用。

字符流

字符流的抽象基类:

Reader,Writer。

字符流的理解,由来和作用?

由于很多国家的文字融入进来,比如说中文在编码表中默认占2个字节。

而为了按照文字的单位来处理,所以出现了字符流。

由来:

早期的字节流+编码表,为了更便于操作文字数据。

作用:

为了处理文字数据。

复制文件的原理和代码。

原理:

首先用一个读取流对象和一个文件进行关联,然后用一个写入流对象作为目地的,

为了把读取流中的文件传输到目的地流对象中,我们就提供了一个字符数组,

为了关联这个数组,所以读取流对象有一个read()方法与这个字符数组进行关联,

同理,写入流对象也有一个write()方法与这个字符数组进行关联,

这样2个流对象就相连接了,而这个字符数组就相当于一个中转站。

importjava.io.FileReader;

importjava.io.FileWriter;

importjava.io.IOException;

/*

*对文本文件进行复制。

将c盘的文件复制到d盘中。

*原理:

其实就是一个最简单的读写过程。

*从c盘源,读取数据,并将读到的数据,写入到目的d盘中。

*/

publicclassCopyTextFileTest{

publicstaticvoidmain(String[]args){

FileReaderfr=null;

FileWriterfw=null;

try{

//1,创建一个字符读取流读取与源数据相关联。

fr=newFileReader("demo.txt");

//2,创建一个存储数据的目的地。

fw=newFileWriter("copyDemo.txt");

//3,创建一个字符数组将读取流对象和写入流对象相连接。

char[]buf=newchar[1024];

//4,每次读取的长度不一样,所以定义一个变量.

intlen=0;

//5,用循环读取文件中的数据

while((len=fr.read(buf))!

=-1)//判断是否读取完没

fw.write(buf,0,len);//为了只读取有效的数据

}catch(Exceptione){

}finally{

try{

fr.close();

}catch(IOExceptione){

e.printStackTrace();

}

try{

fw.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

读取字符流对象的两种方式

第一种读取方式一次读一个字符

//1,创建一个文件读取流对象,和指定名称的文件相关联

//2,要保证该文件时已经存在的。

如果不存在,会发生异常。

FileNotFoundException

FileReaderfr=newFileReader("Demo.txt");

//3,调用读取流的方法,read方法一次读一个字符,而且会自动往下读。

intline=0;//read返回时int型的数,即返回的是字符的ascII表对应的数字

while((line=fr.read())!

=-1)

{

sop((char)ch);

}

第二种读取方式

//1,创建一个文件读取流对象,和指定名称的文件相关联

//2,要保证该文件时已经存在的。

如果不存在,会发生异常。

FileNotFoundException

FileReaderfr=newFileReader("Demo.txt");//把Demo.txt中的数据读到控制台

//3,定义一个字符数组,用于存储独到的字符该read(char[])//返回的是读到字符的个数

char[]buf=newchar[1024];

intlen=0;

while((len=fr.read(buf))!

=-1)//把读到的字符暂时存到buf数组中

{

sop("num="+num+"...."+newString(buf,0,len));

}

缓冲区的基本思想?

提高效率的原理。

缓冲区的基本思想就是对要处理的数据进行临时存储。

譬如购物车以及篮子。

原理:

减少频繁的操作。

给读取流对象和写入流对象提供中转站。

相对于来回跑的麻烦,利用缓冲区的容量,可以一边先存储,满了后再写入的方式,这样就提高了效率。

BufferedReader,BufferedWriter.高效的体现?

内部将数组进行封装。

变成对象后,方便于对缓冲区的操作。

提高效率。

并提供了对文本便捷操作的方法。

readLine

newLine。

自定义缓冲区,MyBufferedReader

importjava.io.IOException;

importjava.io.Reader;

/*

*模拟一个缓冲区

*基于已有的缓冲区思想,我们可以从源读取用read方法。

*我们的缓冲区,应该是一个更高效的read读取方法。

*/

publicclassMyBufferTestextendsReader{

privateReaderr;

privatechar[]buf=newchar[1024];

privateintcount=0,pos=0;

publicMyBufferTest(Readerr){

this.r=r;

}

/**

*一次从缓冲区中取一个

*@return返回一个缓冲区中的字符

*@throwsIOException

*/

publicintmyRead()throwsIOException{

//1,首先判断缓冲区中是否有数据,如果没有就从源中去拿。

if(count==0){

count=r.read(buf);

pos=0;

}

//2,当缓冲区中没数据了且源中也没有数据时,count自减1小于0时就返回-1结束.

if(count<0)

return-1;

//3,如果以上都不满足,那么从缓冲区中写入一个字符到新的文件中。

charch=buf[pos];

pos++;

count--;

returnch;

}

/**

*按照文本特点,提供一个特有的操作文本的方法。

*一次读取一行文本,只要是到行结束符之前的文本即可。

*@return返回读取到的一行文本

*@throwsIOException

*原理:

*就是从缓冲区中取出数据,并存储到一个临时容器中。

*如果取到了回车符,就将临时容器中的数据转成字符串返回。

*/

publicStringmyReadLine()throwsIOException{

//1,定义一个临时容器,进行临时存储

StringBuildersb=newStringBuilder();

//2,定义一个变量,接收读取到的字符,也就是转成ask码表后的一个int型数字

intch=0;

while((ch=myRead())!

=-1){

//3,当读取到\r时,直接跳出本次循环

if(ch=='\r')

continue;

//4,当读取到\n时,直接跳出当前循环

if(ch=='\n')

returnsb.toString();

//5,当都没有读取到时,就将这些数据存储到临时容器中。

sb.append((char)ch);

}

//6,当临时容器中的长度不等于0时,就输出字符。

if(sb.length()!

=0)

returnsb.toString();

returnnull;

}

@Override

publicvoidclose()throwsIOException{

}

@Override

publicintread(char[]arg0,intarg1,intarg2)throwsIOException{

return0;

}

}

readLine方法的原理。

就是从缓冲区中获取数据,并进行临时存储,知道读取到了换行符,

将临时存储的数据转成字符串返回。

它对于操作文本是毕竟方便,可以完成一行一行的读取文本。

装饰设计模式,以及和继承的区别?

对原有类进行了功能的改变,增强。

区别:

1,

继承在对对象进行增强时,采用的是子类覆盖父类中的写方法,

且这些子类使用的功能的原理都一样,这样就显得很臃肿。

而BufferWriter的出现避免了继承体系关系的臃肿,比继承更为灵活。

2,

在为了增强功能的情况下,相较于继承,BufferWriter这种方式解决起来更为方便。

使用字符流可以复制图片吗?

为什么?

不能,因为字符流就是字节流+编码表,而用字符流去复制图片时,字符流会默认将图片的字节码格式进行编码,

所以会导致复制后的图片与原图片可能不一致。

字符流继承体系简图

字节流的抽象基类:

InputStream,OutputStream。

字节流的基本应用?

复制MP3的例子。

基本操作与字符流类相同

但它不仅可以操作字符,还可以操作其他媒体文件

复制MP3的四种方式。

importjava.io.BufferedInputStream;

importjava.io.BufferedOutputStream;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

publicclassCopyMediaFileTest{

/**

*@paramargs

*@throwsIOException

*/

publicstaticvoidmain(String[]args)throwsIOException{

longstart=System.currentTimeMillis();

copy_4();

longend=System.currentTimeMillis()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1