说说你对io流的理解.docx

上传人:b****2 文档编号:2578652 上传时间:2023-05-04 格式:DOCX 页数:14 大小:21.82KB
下载 相关 举报
说说你对io流的理解.docx_第1页
第1页 / 共14页
说说你对io流的理解.docx_第2页
第2页 / 共14页
说说你对io流的理解.docx_第3页
第3页 / 共14页
说说你对io流的理解.docx_第4页
第4页 / 共14页
说说你对io流的理解.docx_第5页
第5页 / 共14页
说说你对io流的理解.docx_第6页
第6页 / 共14页
说说你对io流的理解.docx_第7页
第7页 / 共14页
说说你对io流的理解.docx_第8页
第8页 / 共14页
说说你对io流的理解.docx_第9页
第9页 / 共14页
说说你对io流的理解.docx_第10页
第10页 / 共14页
说说你对io流的理解.docx_第11页
第11页 / 共14页
说说你对io流的理解.docx_第12页
第12页 / 共14页
说说你对io流的理解.docx_第13页
第13页 / 共14页
说说你对io流的理解.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

说说你对io流的理解.docx

《说说你对io流的理解.docx》由会员分享,可在线阅读,更多相关《说说你对io流的理解.docx(14页珍藏版)》请在冰点文库上搜索。

说说你对io流的理解.docx

说说你对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代码中使用可序

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2