IO流体系总结Word格式.docx
- 文档编号:15905718
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:23
- 大小:27.08KB
IO流体系总结Word格式.docx
《IO流体系总结Word格式.docx》由会员分享,可在线阅读,更多相关《IO流体系总结Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
字符流的理解,由来和作用?
由于很多国家的文字融入进来,比如说中文在编码表中默认占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();
}
fw.close();
}
}
}
读取字符流对象的两种方式
第一种读取方式一次读一个字符
//1,创建一个文件读取流对象,和指定名称的文件相关联
//2,要保证该文件时已经存在的。
如果不存在,会发生异常。
FileNotFoundException
FileReaderfr=newFileReader("
Demo.txt"
//3,调用读取流的方法,read方法一次读一个字符,而且会自动往下读。
intline=0;
//read返回时int型的数,即返回的是字符的ascII表对应的数字
while((line=fr.read())!
=-1)
{
sop((char)ch);
第二种读取方式
//1,创建一个文件读取流对象,和指定名称的文件相关联
//2,要保证该文件时已经存在的。
FileReaderfr=newFileReader("
//把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时,直接跳出当前循环
\n'
returnsb.toString();
//5,当都没有读取到时,就将这些数据存储到临时容器中。
sb.append((char)ch);
//6,当临时容器中的长度不等于0时,就输出字符。
if(sb.length()!
=0)
returnsb.toString();
returnnull;
@Override
publicvoidclose()throwsIOException{
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;
publicclassCopyMediaFileTest{
*@paramargs
publicstaticvoidmain(String[]args)throwsIOException{
longstart=System.currentTimeMillis();
copy_4();
longend=System.currentTimeMillis()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IO 流体 总结