说说你对io流的理解.docx
《说说你对io流的理解.docx》由会员分享,可在线阅读,更多相关《说说你对io流的理解.docx(14页珍藏版)》请在冰点文库上搜索。
![说说你对io流的理解.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/c7b32ed3-9931-46f3-a7cf-595dac48e79a/c7b32ed3-9931-46f3-a7cf-595dac48e79a1.gif)
说说你对io流的理解
说说你对io流的理解
【篇一:
说说你对io流的理解】
你首先得弄清楚流的概念,流是对输入输出设备的抽象,输入输出设备比如:
文件、显示器、内存等等,他们都可成为流,至于是输入流还是输出流则是一个相对的概念,我们可将程序作为一方,将流(设备)作为另一方,如果数据的流向是程序至流(设备),我们成为输出流,反之我们称为输入流。
希望能对你有帮助!
提问者评价我问的就是流的概念啊!
太感谢了。
。
。
你多大了,有没有婚配!
#28
【篇二:
说说你对io流的理解】
java中其他多种多样变化的流均是由它们派生出来的:
jdk1.4版本开始引入了新i/o类库,它位于java.nio包中,新i/o类库利用通道和缓冲区等来提高i/o操作的效率。
在java.io包中,java.io.inputstream表示字节输入流,java.io.outputstream表示字节输出流,处于java.io包最顶层。
这两个类均为抽象类,也就是说它们不能被实例化,必须生成子类之后才能实现一定的功能。
7字节流inputstream/outputstream
7.1inputstream抽象类
inputstream为字节输入流,它本身为一个抽象类,必须依靠其子类实现各种功能,此抽象类是表示字节输入流的所有类的超类。
继承自inputstream的流都是向程序中输入数据的,且数据单位为字节(8bit);
inputstream是输入字节数据用的类,所以inputstream类提供了3种重载的read方法.inputstream类中的常用方法:
1)publicabstractintread():
读取一个byte的数据,返回是高位补0的int类型。
若返回=-1说明没有读取到任何字节读取工作结束。
2)publicintread(byteb[]):
读取b.length个字节的数据放到b数组中。
返回是读取的字节数。
该方法实际上是调用下一个方法实现的。
3)publicintread(byteb[],intoff,intlen):
从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
4)publicintavailable():
返回输入流中可以读取的字节数。
注意:
若输入阻塞,当前线程将被挂起,如果inputstream对象调用这个方法的话,它只会返回0,这个方法必须由继承inputstream类的子类对象调用才有用。
5)publiclongskip(longn):
忽略输入流中的n个字节,返回是实际忽略的字节数,跳过一些字节来读取。
6)publicintclose():
我们在使用完后,必须对我们打开的流进行关闭。
主要的子类:
1)fileinputstream:
把一个文件作为inputstream,实现对文件的读取操作;
2)bytearrayinputstream:
把内存中的一个缓冲区作为inputstream使用;
3)stringbufferinputstream:
把一个string对象作为inputstream;
4)pipedinputstream:
实现了pipe的概念,主要在线程中使用;
5)sequenceinputstream:
把多个inputstream合并为一个inputstream。
7.2outputstream抽象类
outputstream提供了3个write方法来做数据的输出,这个是和inputstream是相对应的。
1)publicvoidwrite(byteb[]):
将参数b中的字节写到输出流。
2)publicvoidwrite(byteb[],intoff,intlen):
将参数b的从偏移量off开始的len个字节写到输出流。
3)publicabstractvoidwrite(intb):
先将int转换为byte类型,把低字节写入到输出流中。
4)publicvoidflush():
将数据缓冲区中数据全部输出,并清空缓冲区。
5)publicvoidclose():
关闭输出流并释放与流相关的系统资源。
主要的子类:
1)bytearrayoutputstream:
把信息存入内存中的一个缓冲区中
2)fileoutputstream:
把信息存入文件中
3)pipedoutputstream:
实现了pipe的概念,主要在线程中使用
4)sequenceoutputstream:
把多个outstream合并为一个outstream
流结束的判断:
方法read()的返回为-1时;readline()的返回为null时。
7.3文件输入流fileinputstream类
fileinputstream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。
在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。
作用:
以文件作为数据输入源的数据流。
或者说是打开文件,从文件读数据到内存的类。
使用方法
(1)
filefin=newfile(d:
/abc.txt
fileinputstreamin=newfileinputstream(fin);
使用方法
(2)
fileinputstreamin=newfileinputstream(“d:
/abc.txt”);
viewcode7.4文件输出流fileoutputstream类
作用:
用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件。
fileoutputstream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是file或filedescriptor对象。
创建一个文件流对象有两种方法:
方式1:
filef=newfile(“d:
/myjava/write.txt
fileoutputstreamout=newfileoutputstream(f);
方式2:
fileoutputstreamout=newfileoutputstream(“d:
/myjava/write.txt
方式3:
构造函数将filedescriptor()对象作为其参数。
filedescriptor()fd=newfiledescriptor();
fileoutputstreamf2=newfileoutputstream(fd);
方式4:
构造函数将文件名作为其第一参数,将布尔作为第二参数。
fileoutputstreamf=newfileoutputstream(d:
/abc.txt,true);
注意:
1)文件中写数据时,若文件已经存在,则覆盖存在的文件;2)读/写操作结束时,应调用close方法关闭流。
程序举例:
使用键盘输入一段文章,将文章保存在文件write.txt中
viewcode7.5fileinputstream和fileoutputstream的应用
利用程序将文件file1.txt拷贝到file2.txt中。
viewcode7.6缓冲输入输出流bufferedinputstream/bufferedoutputstream
计算机访问外部设备非常耗时。
访问外存的频率越高,造成cpu闲置的概率就越大。
为了减少访问外存的次数,应该在一次对外设的访问中,读写更多的数据。
为此,除了程序和流节点间交换数据必需的读写机制外,还应该增加缓冲机制。
缓冲流就是每一个数据流分配一个缓冲区,一个缓冲区就是一个临时存储数据的内存。
这样可以减少访问硬盘的次数,提高传输效率。
bufferedinputstream:
当向缓冲流写入数据时候,数据先写到缓冲区,待缓冲区写满后,系统一次性将数据发送给输出设备。
bufferedoutputstream:
当从向缓冲流读取数据时候,系统先从缓冲区读出数据,待缓冲区为空时,系统再从输入设备读取数据到缓冲区。
1)将文件读入内存:
将bufferedinputstream与fileinputstream相接
fileinputstreamin=newfileinputstream(“file1.txt”);
bufferedinputstreambin=newbufferedinputstream(in);
2)将内存写入文件:
将bufferedoutputstream与fileoutputstream相接
fileoutputstreamout=newfileoutputstream(“file1.txt”);
bufferedoutputstreambin=newbufferedinputstream(out);
3)键盘输入流读到内存
将bufferedreader与标准的数据流相接
inputstreamreadersin=newinputstreamreader(system.in);
bufferedreaderbin=newbufferedreader(sin);
viewcode程序说明:
从键盘读入字符,并写入到文件中bufferedreader类的方法:
stringreadline(),作用:
读一行字符串,以回车符为结束。
bufferedwriter类的方法:
bout.write(strings,offset,len),作用:
从缓冲区将字符串s从offset开始,len长度的字符串写到某处。
8字符流writer/reader
java中字符是采用unicode标准,一个字符是16位,即一个字符使用两个字节来表示。
为此,java中引入了处理字符的流。
8.1reader抽象类
用于读取字符流的抽象类。
子类必须实现的方法只有read(char[],int,int)和close()。
但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
1)filereader:
与fileinputstream对应,主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:
(1)将文件名作为字符串:
filereaderf=newfilereader(“c:
/temp.txt”);
(2)构造函数将file对象作为其参数。
filef=newfile(“c:
/temp.txt”);
filereaderf1=newfilereader(f);
(3)构造函数将filedescriptor对象作为参数
filedescriptor()fd=newfiledescriptor();
filereaderf2=newfilereader(fd);
2)chararrayreader:
与bytearrayinputstream对应
(1)用指定字符数组作为参数:
chararrayreader(char[])
(2)将字符数组作为输入流:
chararrayreader(char[],int,int)
3)stringreader:
与stringbufferinputstream对应
读取字符串,构造函数如下:
publicstringreader(strings);
4)inputstreamreader
从输入流读取字节,在将它们转换成字符:
publicinputstreamreader(inputstreamis);
5)filterreader:
允许过滤字符流
protectedfilterreader(readerr);
6)bufferreader:
接受reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。
publicbufferreader(readerr);
主要方法:
(1)publicintread()throwsioexception;//读取一个字符,返回为读取的字符
(2)publicintread(charcbuf[])throwsioexception;/*读取一系列字符到数组cbuf[]中,返回为实际读取的字符的数量*/
(3)publicabstractintread(charcbuf[],intoff,intlen)throwsioexception;
/*读取len个字符,从数组cbuf[]的下标off处开始存放,返回为实际读取的字符数量,该方法必须由子类实现*/
8.2writer抽象类
写入字符流的抽象类。
子类必须实现的方法仅有write(char[],int,int)、flush()和close()。
但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
其子类如下:
1)filewrite:
与fileoutputstream对应
将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。
publicfilewrite(filef);
2)chararraywrite:
与bytearrayoutputstream对应,将字符缓冲器用作输出。
publicchararraywrite();
3)printwrite:
生成式化输出
publicprintwriter(outputstreamos);
4)filterwriter:
用于写入过滤字符流
protectedfilterwriter(writerw);
5)pipedwriter:
与pipedoutputstream对应
6)stringwriter:
无与之对应的以字节为导向的stream
主要方法:
(1)publicvoidwrite(intc)throwsioexception;//将整型c的低16位写入输出流
(2)publicvoidwrite(charcbuf[])throwsioexception;//将字符数组cbuf[]写入输出流
(3)publicabstractvoidwrite(charcbuf[],intoff,intlen)throwsioexception;
//将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
(4)publicvoidwrite(stringstr)throwsioexception;//将字符串str中的字符写入输出流
(5)publicvoidwrite(stringstr,intoff,intlen)throwsioexception;
//将字符串str中从索引off开始处的len个字符写入输出流
(6)flush();//刷空输出流,并输出所有被缓存的字节
(7)close();//关闭流publicabstractvoidclose()throwsioexception
9inputstream与reader差别,outputstream与writer差别
inputstream和outputstream类处理的是字节流,数据流中的最小单位是字节(8个bit)
reader与writer处理的是字符流(16个bit),在处理字符流时涉及了字符编码的转换问题。
reader类能够将输入流中采用其他编码类型的字符转换为unicode字符,然后在内存中为其分配内存
writer类能够将内存中的unicode字符转换为其他编码类型的字符,再写到输出流中。
例子参考:
这篇文章。
10ioexception异常类的子类
publicclasseofexception:
非正常到达文件尾或输入流尾时,抛出这种类型的异常。
publicclassfilenotfoundexception:
当文件找不到时,抛出的异常。
publicclassinterruptedioexception:
当i/o操作被中断时,抛出这种类型的异常。
参考资料:
/ningvsban/p/3600185.html
【篇三:
说说你对io流的理解】
bit最小的二进制单位,是计算机的操作部分取0或者1
byte是计算机操作数据的最小单位由8位bit组成取(-128-127)
char是用户的可读写的最小单位,在java里面由16位bit组成取(0-65535)
bit是最小单位计算机只能认识0或者1
8个字节是给计算机看的
字符是看到的东西一个字符=二个字节
2.什么是流,按照传输的单位,分成哪两种流,并且他们的父类叫什么流是指数据的传输
答案
字节流,字符流
字节流:
inputstreamoutputstream
字符流:
readerwriter流按照传输的方向可以分为哪两种,分别举例说明
答案
输入输出相对于程序
输入流inputstream
,输出流outputstream按照实现功能分为哪两种,分别举例说明
答案
节点流,处理流
节点流:
outputstream
处理流:
outputstreamwriter
5.bufferedreader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法
答案
属于处理流中的缓冲流,可以将读取的内容存在内存里面,有readline()方法
6.什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征
答案
节点流直接与数据源相连,用于输入或者输出
处理流:
在节点流的基础上对之进行加工,进行一些功能的扩展
处理流的构造器必须要传入节点流的子类
7.如果我要对字节流进行大量的从硬盘读取,要用那个流,为什么
答案
bufferedinputstream使用缓冲流能够减少对硬盘的损伤
8.如果我要打印出不同类型的数据到数据源,那么最适合的流是那个流,为什么
答案
printwriter可以打印各种数据类型
9.怎么样把我们控制台的输出改成输出到一个文件里面,这个技术叫什么
答案
setout(printwriter,printstream)重定向
11.怎么样把输出字节流转换成输出字符流,说出它的步骤
答案
使用转换处理流outputstreamwriter可以将字节流转为字符流
newoutputstreamwriter(newfileoutputstream(filefile));
12.把包括基本类型在内的数据和字符串按顺序输出到数据源,或者按照顺序从数据源读入,一般用哪两个流
答案
datainputstreamdataoutputstream
13.把一个对象写入数据源或者从一个数据源读出来,用哪两个流
答案
objectinputstreamobjectoutputstream
14.什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作
答案
对象序列化,将对象以二进制的形式保存在硬盘上
反序列化;将二进制的文件转化为对象读取
实现serializable接口
不想让字段放在硬盘上就加transient
15.如果在对象序列化的时候不想给一个字段的数据保存在硬盘上面,采用那个关键字?
答案
transient关键字
16.在实现序列化接口是时候一般要生成一个serialversionuid字段,它叫做什么,一般有什么用
答案
是版本号,要保持版本号的一致来进行序列化
为了防止序列化出错
17.inputstream里的read()返回的是什么,read(byte[]data)是什么意思,返回的是什么
答案
返回的是所读取的字节的int型(范围0-255)
read(byte[]data)将读取的字节储存在这个数组
返回的就是传入数组参数个数
read字节读取字节字符读取字符
18.outputstream里面的write()是什么意思,write(byteb[],intoff,intlen)这个方法里面的三个参数分别是什么意思
答案
write将指定字节传入数据源
byteb[]是byte数组
b[off]是传入的第一个字符
b[offlen-1]是传入的最后的一个字符
len是实际长度
19.流一般需要不需要关闭,如果关闭的话在用什么方法,一般要在那个代码块里面关闭比较好,处理流是怎么关闭的,如果有多个流互相调用传入是怎么关闭的?
答案
流一旦打开就必须关闭,使用close方法
放入finally语句块中(finally语句一定会执行)
调用的处理流就关闭处理流
多个流互相调用只关闭最外层的流
20.java中的所有的流可以分为几大类,它们的名字是什么,各代表什么
答
案
分为字节输入流inputstream
字节输出流outputstream
字符输入流reader
字符输出流writer
所有流都是这四个流的子类
说下常用的io流
inputstream,outputstream,
fileinputstream,fileoutputstream,
bufferedinputstream,bufferedoutputstream
reader,writer
bufferedreader,bufferedwriter21写一段代码读取一个序列化的对象一般使用哪种stream?
a、inputstreamb、filereaderc、datainputstreamd、objectstream22io流怎样读取文件的?
使用file对象获取文件路径,通过字符流reader加入文件,使用字符缓存流bufferedreader处理reader,再定义一个字符串,循环遍历出文件。
代码如下:
filefile=newfile(d:
/spring.txt
try{
readerreader=newfilereader(file);
bufferedreaderbuffered=newbufferedreader(reader);
stringdata=null;
while((data=buffered.readline())!
=null){
system.out.println(data);
}
}catch(filenotfoundexceptione){
e.printstacktrace();
}catch(ioexceptione){
e.printstacktrace();
23说说你对io流的理解
io流主要是用来处理输入输出问题,常用的io流有inputstream,outputstream,reader,writer等24java的io流和readline方法
java的io流用来处理输入输出问题,readline是bufferedreader里的一个方法,用来读取一行。
25用什么把对象动态的写入磁盘中,写入要实现什么接口。
objectinputstream,需要实现serializable接口26fileinputstream创建详情,就是怎样的创建不报错,它列出了几种形式!
fileinputstream是inputstream的子类,通过接口定义,子类实现创建fileinputstream,27用io流中的技术,指定一个文件夹的目录,获取此目录下的所有子文件夹路径
28请问你在什么情况下会在你得java代码中使用可序