如何写论文?写好论文?免费论文网提供各类免费论文写作素材!
当前位置:免费论文网 > 工作总结 > 学习总结 > java,io流学习总结

java,io流学习总结

来源:免费论文网 | 时间:2016-09-18 14:03:13 | 移动端:java,io流学习总结

篇一:Java之IO流学习总结

Java之IO流学习总结

一、什么是流?

流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件、内存、IO设备等数据的流向。而IO流就是用于处理设备上的数据,如:硬盘、内存、键盘录入等。IO流根据处理类型的不同可分为字节流和字符流,根据流向的不同可分为输入流和输出流。

二、字节流和字符流的区别:

字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。

三、IO体系,所具备的基本功能就是读和写:

1.字符流

|-- Reader(读)

|-- Writer(写)

Reader

|--InputStreamReader

|--FileReader:用于处理文件的字符读取流对象

Writer

|--OutputStreamWriter

|--FileWriter:用于处理文件的字符写入流对象

其实很容易就可以看出来,IO体系中的子类名后缀绝大部分是父类名称,而前缀则是体现子类特有功能的名称。

Reader中常见的方法:

|--int read()

读取一个字符,并返回读到的这个字符,读到流的末尾则返回-1。

|--int read(char[])

将读到的字符存入指定的数组中,返回的是读到的字符个数,读到流的末尾则返回-1。 |--close()

读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。 FileReader除了自己的构造函数外没有特有的方法:

|--用于读取文本文件的流对象。

|--用于关联文本文件。

在读取流对象初始化时,必须要指定一个被读取的文件,

如果该文件不存在则会发生FileNotFoundException异常。

Writer中常见的方法:

|--write()

将一个字符写入到流中。

|--write(char[])

将一个字符数组写入到流中。

|--writer(String)

将一个字符写入到流中。

|--flush()

刷新流,将流中的数据刷新到目的地中,流还存在。

|--close()

关闭资源,在关闭钱会先调用flush(),刷新流中的数据到目的地。

FileWriter,除了自己的构造函数外没有特有的方法:

|--该类的特点

|--用于处理文本文件

|--没有默认的编码表

|--有临时缓冲

|--构造函数,在写入流对象初始化时,必须要有一个存储数据的目的地。

|--FileWriter(String fileName),该构造器是干什么用的呢?

|--调用系统资源

|--在指定位置创建一个文件,如果该文件已经存在则被覆盖。

|--FileWriter(String filename,Boolean append),这构造器的作用是当传入的boolean类型的值为true时,会在指定文件末尾处进行数据的续写。

清单1,将文本数据保存到文件中代码 private static void test1(){FileWriter fw=null;

//初始化FileWriter对象,指定文件名已经存储路径 fw=new FileWriter("D:/test.txt");

fw.write("将字符串写入流");

//将流中的数据刷新到目的地,流还在 fw.flush();

fw.write("将字符串写入流");} catch (IOException e) { e.printStackTrace();}finally{ if(fw!=null){ try {fw.close(); } catch (IOException e1) {e1.printStackTrace(); }}}

}

清单2,读取一个已有文本文件,并将文本内容打印出来代码 private static void test2(){FileReader fr=null;try {

//初始化FileReader对象,指定文件路径 fr=new FileReader("D:/test.txt"); int ch=0; while((ch=fr.read())!=-1){

//每次读取一个字符,直到读到末尾-1为止 System.out.println((char)ch);

} catch (IOException e) { e.printStackTrace();}finally{ if(fr!=null){ try {fr.close(); } catch (IOException e1) {e1.printStackTrace(); }}}

}

这样每读到一个字符就打印出来,效率很不高,能不能按指定大小读取完后再打印出来呢?答案是当然可以的。

清单3,读取一个已有文本文件,读完1kb再将其读到的内容打印出来代码 private static void test3(){FileReader fr=null;try {

//初始化FileReader对象,指定文件路径 fr=new FileReader("D:/test.txt"); char[] buf=new char[1024]; int len=0; while((len=fr.read(buf))!=-1){

//每次读取1kb大小的字符,直到读到末尾-1为止 System.out.println(new String(buf,0,len)); }} catch (IOException e) {

篇二:JAVA,IO流学习总结

篇一:java之io流学习总结

java之io流学习总结一、什么是流?

流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是java及c++中的一个重要机制,通过流我们可以自由地控制文件、内存、io设备等数据的流向。而io流就是用于处理设备上的数据,如:硬盘、内存、键盘录入等。io流根据处理类型的不同可分为字节流和字符流,根据流向的不同可分为输入流和输出流。

二、字节流和字符流的区别:字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在utf-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。

三、io体系,所具备的基本功能就是读和写:

1.字符流

|-- reader(读)

|-- writer(写)

reader

|--inputstreamreader

|--filereader:用于处理文件的字符读取流对象

writer

|--outputstreamwriter

|--filewriter:用于处理文件的字符写入流对象

其实很容易就可以看出来,io体系中的子类名后缀绝大部分是父类名称,而前缀则是体现子类特有功能的名称。

reader中常见的方法:

|--int read()

读取一个字符,并返回读到的这个字符,读到流的末尾则返回-1。

|--int read(char[])

将读到的字符存入指定的数组中,返回的是读到的字符个数,读到流的末尾则返回-1。 |--close()

读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。 filereader除了自己的构造函数外没有特有的方法:

|--用于读取文本文件的流对象。

|--用于关联文本文件。在读取流对象初始化时,必须要指定一个被读取的文件, 如果该文件不存在则会发生filenotfoundexception异常。

writer中常见的方法:

|--write()

将一个字符写入到流中。

|--write(char[])

将一个字符数组写入到流中。

|--writer(string)

将一个字符写入到流中。

|--flush()

刷新流,将流中的数据刷新到目的地中,流还存在。

|--close()

关闭资源,在关闭钱会先调用flush(),刷新流中的数据到目的地。

filewriter,除了自己的构造函数外没有特有的方法:

|--该类的特点

|--用于处理文本文件

|--没有默认的编码表

|--有临时缓冲

|--构造函数,在写入流对象初始化时,必须要有一个存储数据的目的地。

|--filewriter(string filename),该构造器是干什么用的呢?

|--调用系统资源

|--在指定位置创建一个文件,如果该文件已经存在则被覆盖。

|--filewriter(string filename,boolean append),这构造器的作用是当传入的boolean类型的值为true时,会在指定文件末尾处进行数据的续写。

清单1,将文本数据保存到文件中代码 private static void test1(){filewriter fw=null;//初始化filewriter对象,指定文件名已经存储路径 fw=new filewriter(d:/test.txt);

fw.write(将字符串写入流);

//将流中的数据刷新到目的地,流还在 fw.flush();

fw.write(将字符串写入流);} catch (ioexception e) { e.printstacktrace();}finally{ if(fw!=null){ try {fw.close(); } catch (ioexception e1) {e1.printstacktrace(); }}}

}

清单2,读取一个已有文本文件,并将文本内容打印出来代码 private static void test2(){filereader fr=null;try {

//初始化filereader对象,指定文件路径 fr=new filereader(d:/test.txt); int ch=0; while((ch=fr.read())!=-1){

//每次读取一个字符,直到读到末尾-1为止 system.out.println((char)ch);} catch (ioexception e) { e.printstacktrace();}finally{ if(fr!=null){ try {fr.close(); } catch (ioexception e1) {e1.printstacktrace(); }}}

}

这样每读到一个字符就打印出来,效率很不高,能不能按指定大小读取完后再打印出来呢?答案是当然可以的。

清单3,读取一个已有文本文件,读完1kb再将其读到的内容打印出来代码 private static void test3(){filereader fr=null;try {

//初始化filereader对象,指定文件路径 fr=new filereader(d:/test.txt); char[] buf=new char[1024]; int len=0; while((len=fr.read(buf))!=-1){

//每次读取1kb大小的字符,直到读到末尾-1为止 system.out.println(new string(buf,0,len)); }} catch (ioexception e) {篇二:java io流学习总结

java流操作有关的类或接口:

java流类图结构:流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

io流的分类

? 根据处理数据类型的不同分为:字符流和字节流

? 根据数据流向不同分为:输入流和输出流

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

? 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射 字符,一次可能读多个字节。

? 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处 理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

java io流对象

1.输入字节流inputstreamio 中输入字节流的继承图可见上图,可以看出:

1. inputstream 是所有的输入字节流的父类,它是一个抽象类。

2. bytearrayinputstream、stringbufferinputstream、fileinputstream 是三种基本的介质

流,它们分别从byte 数组、stringbuffer、和本地文件中读取数据。pipedinputstream 是从与其它线程共用的管道中读取数据,与piped 相关的知识后续单独介绍。

3. objectinputstream 和所有filterinputstream 的子类都是装饰流(装饰器模式的主角)。

2.输出字节流outputstream

io 中输出字节流的继承图可见上图,可以看出:

1. outputstream 是所有的输出字节流的父类,它是一个抽象类。

2. bytearrayoutputstream、fileoutputstream 是两种基本的介质流,它们分别向byte 数 组、和本地文件中写入数据。pipedoutputstream 是向与其它线程共用的管道中写入数据,

3. objectoutputstream 和所有filteroutputstream 的子类都是装饰流。

3.字节流的输入与输出的对应

图中蓝色的为主要的对应部分,红色的部分就是不对应部分。紫色的虚线部分代表这些流一般要搭配使用。从上面的图中可以看出java io 中的字节流是极其对称的。“存在及合理”我们看看这些字节流中不太对称的几个类吧!

1. linenumberinputstream 主要完成从流中读取数据时,会得到相应的行号,至于什么 时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。在输出部分没有对应的部分,我们完全可以自己建立一个linenumberoutputstream,在最初写入时会有一个基准的行号,以后每次遇到换行时会在下一行添加一个行号,看起来也是可以的。好像更不入流了。

2. pushbackinputstream 的功能是查看最后一个字节,不满意就放入缓冲区。主要用在 编译器的语法、词法分析部分。输出部分的bufferedoutputstream 几乎实现相近的功能。

3. stringbufferinputstream 已经被deprecated,本身就不应该出现在inputstream 部分, 主要因为string 应该属于字符流的范围。已经被废弃了,当然输出部分也没有必要需要它了!还允许它存在只是为了保持版本的向下兼容而已。

4. sequenceinputstream 可以认为是一个工具类,将两个或者多个输入流当成一个输入 流依次读取。完全可以从io 包中去除,还完全不影响io 包的结构,却让其更“纯洁”――

纯洁的decorator 模式。

5. printstream 也可以认为是一个辅助工具。主要可以向其他输出流,或者

fileinputstream 写入数据,本身内部实现还是带缓冲的。本质上是对其它流的综合运用的一个工具而已。一样可以踢出io 包!system.out 和system.out 就是printstream 的实例!

4.字符输入流reader在上面的继承关系图中可以看出:

1. reader 是所有的输入字符流的父类,它是一个抽象类。

2. charreader、stringreader 是两种基本的介质流,它们分别将char 数组、string中 读取数据。pipedreader 是从与其它线程共用的管道中读取数据。

3. bufferedreader 很明显就是一个装饰器,它和其子类负责装饰其它reader 对象。

4. filterreader 是所有自定义具体装饰流的父类,其子类pushbackreader 对reader 对 象进行装饰,会增加一个行号。

5. inputstreamreader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。 filereader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将fileinputstream 转变为reader 的方法。我们可以从这个类中得到一定的技巧。reader 中各个类的用途和使用方法基本和inputstream 中的类使用一致。后面会有reader 与inputstream 的对应关系。

5.字符输出流writer

在上面的关系图中可以看出:

1. writer 是所有的输出字符流的父类,它是一个抽象类。

2. chararraywriter、stringwriter 是两种基本的介质流,它们分别向char 数组、string 中写入数据。pipedwriter 是向与其它线程共用的管道中写入数据,

3. bufferedwriter 是一个装饰器为writer 提供缓冲功能。

4. printwriter 和printstream 极其类似,功能和使用也非常相似。

5. outputstreamwriter 是outputstream 到writer 转换的桥梁,它的子类filewriter 其 实就是一个实现此功能的具体类(具体可以研究一sourcecode)。功能和使用和outputstream 极其类似,后面会有它们的对应图。

6.字符流的输入与输出的对应

7.字符流与字节流转换

转换流的特点:

1. 其是字符流和字节流之间的桥梁

2. 可对读取到的字节数据经过指定编码转换成字符

3. 可对读取到的字符数据经过指定编码转换成字节

何时使用转换流?

1. 当字节和字符之间有转换动作时;

2. 流操作的数据需要编码或解码时。

具体的对象体现:

1. inputstreamreader:字节到字符的桥梁

2. outputstreamwriter:字符到字节的桥梁

这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。

8.file类

file类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 file类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列

表,创建、删除文件和目录等方法。

篇三:java io流学习总结

java流操作有关的类或接口:

java流类图结构:流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

io流的分类

根据处理数据类型的不同分为:字符流和字节流

? 根据数据流向不同分为:输入流和输出流 ?

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

? 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 ?

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

java io流对象

1.输入字节流inputstreamio 中输入字节流的继承图可见上图,可以看出:

1. inputstream 是所有的输入字节流的父类,它是一个抽象类。

2. bytearrayinputstream、stringbufferinputstream、fileinputstream 是三种基本的介质流,它们分别从byte 数组、stringbuffer、和本地文件中读取数据。pipedinputstream 是从与其它线程共用的管道中读取数据,与piped 相关的知识后续单独介绍。

3. objectinputstream 和所有filterinputstream 的子类都是装饰流(装饰器模式的主角)。

2.输出字节流outputstream

io 中输出字节流的继承图可见上图,可以看出:

1. outputstream 是所有的输出字节流的父类,它是一个抽象类。

2. bytearrayoutputstream、fileoutputstream 是两种基本的介质流,它们分别向byte 数组、和本地文件中写入数据。pipedoutputstream 是向与其它线程共用的管道中写入数据,

3. objectoutputstream 和所有filteroutputstream 的子类都是装饰流。

3.字节流的输入与输出的对应

图中蓝色的为主要的对应部分,红色的部分就是不对应部分。紫色的虚线部分代表这些流一般要搭配使用。从上面的图中可以看出java io 中的字节流是极其对称的。“存在及合理”我们看看这些字节流中不太对称的几个类吧!

1. linenumberinputstream 主要完成从流中读取数据时,会得到相应的行号,至于什么时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。在输出部分没有对应的部 分,我们完全可以自己建立一个linenumberoutputstream,在最初写入时会有一个基准的行号,以后每次遇到换行时会在下一行添加一个行 号,看起来也是可以的。好像更不入流了。

2. pushbackinputstream 的功能是查看最后一个字节,不满意就放入缓冲区。主要用在编译

篇三:Java之IO流学习总结

Java之IO流学习总结

一、什么是流?

流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件、内存、IO设备等数据的流向。而IO流就是用于处理设备上的数据,如:硬盘、内存、键盘录入等。IO流根据处理类型的不同可分为字节流和字符流,根据流向的不同可分为输入流和输出流。

二、字节流和字符流的区别:

字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。

三、IO体系,所具备的基本功能就是读和写:

1.字符流

|-- Reader(读)

|-- Writer(写)

Reader

|--InputStreamReader

|--FileReader:用于处理文件的字符读取流对象

Writer

|--OutputStreamWriter

|--FileWriter:用于处理文件的字符写入流对象

其实很容易就可以看出来,IO体系中的子类名后缀绝大部分是父类名称,而前缀则是体现子类特有功能的名称。

Reader中常见的方法:

|--int read()

读取一个字符,并返回读到的这个字符,读到流的末尾则返回-1。

|--int read(char[])

将读到的字符存入指定的数组中,返回的是读到的字符个数,读到流的末尾则返回-1。 |--close()

读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。 FileReader除了自己的构造函数外没有特有的方法:

|--用于读取文本文件的流对象。

|--用于关联文本文件。

在读取流对象初始化时,必须要指定一个被读取的文件,

如果该文件不存在则会发生FileNotFoundException异常。

Writer中常见的方法:

|--write()

将一个字符写入到流中。

|--write(char[])

将一个字符数组写入到流中。

|--writer(String)

将一个字符写入到流中。

|--flush()

刷新流,将流中的数据刷新到目的地中,流还存在。

|--close()

关闭资源,在关闭钱会先调用flush(),刷新流中的数据到目的地。

FileWriter,除了自己的构造函数外没有特有的方法:

|--该类的特点

|--用于处理文本文件

|--没有默认的编码表

|--有临时缓冲

|--构造函数,在写入流对象初始化时,必须要有一个存储数据的目的地。

|--FileWriter(String fileName),该构造器是干什么用的呢?

|--调用系统资源

|--在指定位置创建一个文件,如果该文件已经存在则被覆盖。

|--FileWriter(String filename,Boolean append),这构造器的作用是当传入的boolean类型的值为true时,会在指定文件末尾处进行数据的续写。

清单1,将文本数据保存到文件中代码 private static void test1(){FileWriter fw=null;

//初始化FileWriter对象,指定文件名已经存储路径 fw=new FileWriter("D:/test.txt");

fw.write("将字符串写入流");

//将流中的数据刷新到目的地,流还在 fw.flush();

fw.write("将字符串写入流");} catch (IOException e) { e.printStackTrace();}finally{ if(fw!=null){ try {fw.close(); } catch (IOException e1) {e1.printStackTrace(); }}}

}

清单2,读取一个已有文本文件,并将文本内容打印出来代码 private static void test2(){FileReader fr=null;try {

//初始化FileReader对象,指定文件路径 fr=new FileReader("D:/test.txt"); int ch=0; while((ch=fr.read())!=-1){

//每次读取一个字符,直到读到末尾-1为止 System.out.println((char)ch);

} catch (IOException e) { e.printStackTrace();}finally{ if(fr!=null){ try {fr.close(); } catch (IOException e1) {e1.printStackTrace(); }}}

}

这样每读到一个字符就打印出来,效率很不高,能不能按指定大小读取完后再打印出来呢?答案是当然可以的。

清单3,读取一个已有文本文件,读完1kb再将其读到的内容打印出来代码 private static void test3(){FileReader fr=null;try {

//初始化FileReader对象,指定文件路径 fr=new FileReader("D:/test.txt"); char[] buf=new char[1024]; int len=0; while((len=fr.read(buf))!=-1){

//每次读取1kb大小的字符,直到读到末尾-1为止 System.out.println(new String(buf,0,len)); }} catch (IOException e) {


java,io流学习总结》由:免费论文网互联网用户整理提供;
链接地址:http://www.csmayi.cn/show/46520.html
转载请保留,谢谢!
相关文章