学习总结

javaio流学习总结

时间:2022-10-07 17:49:18 学习总结 我要投稿
  • 相关推荐

javaio流学习总结范文

  总结一:javaio流学习总结

  一、io流的三种分类方式

javaio流学习总结范文

  1.按流的方向分为:输入流和输出流

  2.按流的数据单位不同分为:字节流和字符流

  3.按流的功能不同分为:节点流和处理流

  二、io流的四大抽象类:

  字符流:reader writer

  字节流:inputstream(读数据)

  outputstream(写数据)

  三、inputstream的基本方法

  int read() throws ioexception 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

  void close() throws ioexception 关闭流释放内存资源

  long skip(long n) throws ioexception 跳过n个字节不读

  四、outputstream的基本方法

  void write(int b) throws ioexception 向输出流写入一个字节数据

  void flush() throws ioexception 将输出流中缓冲的数据全部写出到目的地

  五、writer的基本方法

  void write(int c) throws ioexception 向输出流写入一个字符数据

  void write(string str) throws ioexception将一个字符串中的字符写入到输出流

  void write(string str,int offset,int length)

  将一个字符串从offset开始的length个字符写入到输出流

  void flush() throws ioexception

  将输出流中缓冲的`数据全部写出到目的地

  六、reader的基本方法

  int read() throws ioexception 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

  七、节点流类型

  八、访问文件之fileinputstream和fileoutputstream继承基类用于向文件中输入输出字节

  九、访问文件之filereader和filewriter继承基类用于向文件中输入输出字符

  ----输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入

  ----此类流会抛出filenotfoundexception需要对其进行显示捕捉

  十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。

  此处理流的构造方法都得传相对应的基类类型

  bufferedreader:提供了readline方法用于高校读取一行字符串

  bufferedwriter:提供了newline用于写入一个行分隔符也就是换行

  bufferedinputstream 没多大用处

  bufferedoutputstream 没多大用处

  十一、转换流:主要作用将字节流转换成字符流。用处较大!

  转换流在构造时可以指定其编码集合

  inputstreamreader需要和inputstream套接

  outputstreamwriter需要和outputstream套接

  例:outputstreamwriter osw = new outputstreamwriter (new fileoutputstream(文件路径);

  方法例:osw.getencoding(); 获得流的编码方式

  十二、数据流与字节数组流:

  数据流主要为实现可以存取java原始数据类型如long,boolean

  数据流是字节流

  datainputstream需要和inputstream套接

  dataoutputstream需要和outputstream套接

  datainputstream方法:readboolean() readint() read……()……

  readutf():网络传输常用方法 读一个unicode字符串

  dataoutputstream方法与datainputstream基本对应为写的方法

  //此构造函数等于已可以往一个字节数组里输入内容

  bytearrayoutputstream baos = new bytearrayoutputstream ();

  //此方法为获取一个字节数组方法返回字节数组

  baos.tobytearray();

  //此方法获取字节数组占了多少字节

  new bytearrayinputstream(一个字节数组)。available()

  1bytearrayoutputstream baos =

  2 new bytearrayoutputstream();

  3 dataoutputstream dos =

  4 new dataoutputstream(baos);

  5 try {

  6 dos.writedouble(math.random());

  7 dos.writeboolean(true);

  8 bytearrayinputstream bais =

  9 new bytearrayinputstream(baos.tobytearray());

  10 system.out.println(bais.available());

  11 datainputstream dis = new datainputstream(bais);

  12 system.out.println(dis.readdouble());

  13 system.out.println(dis.readboolean());

  14 dos.close(); dis.close();

  15 } catch (ioexception e) {

  16 e.printstacktrace();

  17 }

  十三、print流

  print流只有输出流无输入流,printwriter和printstream分别针对字符字节

  两个类提供了重载的print和println方法用于多种数据类型的输出

  printwriter和printstream的输出操作不会抛出异常

  printwriter和printstream有自动flush功能

  ----system.setout(接收outputstream类):用于设置系统默认输出流

  十四、object流

  等同于c#序列化,用直接将object写入或读出

  transient关键字为不序列化此成员变量

  需要序列化的类必须实现serializable接口

  主要方法:writeobject(object); readobject();

  读出为object类型需要强转数据类型

  1 import java.io.*;

  2

  3 public class testobjectio {

  4 public static void main(string args[]) throws exception {

  5 t t = new t();

  6 t.k = 8;

  7 fileoutputstream fos = new fileoutputstream("d:/share/java/io/testobjectio.dat");

  8 objectoutputstream oos = new objectoutputstream(fos);

  9 oos.writeobject(t);

  10 oos.flush();

  11 oos.close();

  12

  13 fileinputstream fis = new fileinputstream("d:/share/java/io/testobjectio.dat");

  14 objectinputstream ois = new objectinputstream(fis);

  15 t treaded = (t)ois.readobject();

  16 system.out.println(treaded.i + " " + treaded.j + " " + treaded.d + " " + treaded.k);

  17

  18 }

  19 }

  20

  21 class t

  22 implements serializable

  23 {

  24 int i = 10;

  25 int j = 9;

  26 double d = 2.3;

  27 transient int k = 15;

  28 }

  总结二:javaio流学习总结

  今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结:

  io流主要用于硬板、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为inputstream和outputstream)和字符流(抽象基类为reader和writer)。根据流向不同,可以分为:输入流和输出流。

  字符流和字节流的主要区别:

  1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在utf-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

  2.字节流可以处理所有类型数据,如:图片,mp3,avi视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

  io流主要可以分为节点流和处理流两大类。

  一、节点流类型

  该类型可以从或者向一个特定的地点或者节点读写数据。

  二、处理流类型

  该类型是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象进过其他流的多次包装,叫做流的链接。主要可以分为以下几种:

  一、缓冲流(bufferedinputstream/bufferedoutputstream和bufferedwriter/bufferedreader)他可以提高对流的操作效率。

  该类型的流有一个特有的方法:readline();一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null,其原理还是与缓冲区关联的流对象的read方法,只不过每一次读取到一个字符,先不进行具体操作,先进行临时储存,当读取到回车标记时,将临时容器中储存的数据一次性返回。

  二、转换流(inputstreamreader/outputstreamwriter)

  该类型时字节流和字符流之间的'桥梁,该流对象中可以对读取到的字节数据进行指定编码的编码转换。

  注意:在使用filereader操作文本数据时,该对象使用的时默认的编码表,即

  filereader fr=new filereader(“a.txt”); 与inputstreamreader isr=new inputstreamreader(new fileinputstream("a.txt")); 的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流时必须的。即:

  inputstreamreader isr=new inputstreamreader(new fileinputstream("a.txt"),utf-8);

  三、数据流(datainputstream/dataoutputstream)

  该数据流可以方便地对一些基本类型数据进行直接的存储和读取,不需要再进一步进行转换,通常只要操作基本数据类型的数据,就需要通过datastream进行包装。

  四、打印流(printstream/printwriter)

  printstream是一个字节打印流,system.out对应的类型就是printstream,它的构造函数可以接受三种数据类型的值:1.字符串路径。2.file对象 3.outputstream

  printstream是一个字符打印流,它的构造函数可以接受四种类型的值:1.字符串路径。2.file对象 3.outputstream 4.writer 对于1、2类型的数据,可以指定编码表,也就是字符集,对于3、4类型的数据,可以指定自动刷新,当该自动刷新为true时,只有3个方法可以用:println,printf,format。

  五、对象流(objectinputstream/objectoutputstream)

  该类型的流可以把类作为一个整体进行存取,主要方法有:

  object readobject();该方法抛出异常:classnotfountexception。

  void writeobject(object):被写入的对象必须实现一个接口:serializable,否则就会抛出:notserializableexception

  总结三:javaio流学习总结

  流的概念和作用

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

  io流的分类

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

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

  字符流和字节流

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

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

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

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

  输入流和输出流

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

  java io流对象

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

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

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

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

  2.输出字节流outputstream

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

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

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

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

  “存在及合理”我们看看这些字节流中不太对称的几个类吧!

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

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

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

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

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

  3.字符输入流reader

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

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

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

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

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

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

  4.字符输出流writer

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

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

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

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

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

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

  5.字符流与字节流转换

  转换流的特点:

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

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

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

  何时使用转换流?

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

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

  具体的对象体现:

  inputstreamreader:字节到字符的桥梁

  outputstreamwriter:字符到字节的桥梁

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

  6.file类

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

  7.randomaccessfile类

  该对象并不是流体系中的一员,其封装了字节流,同时还封装了一个缓冲区(字符数组),通过内部的指针来操作字符数组中的数据。 该对象特点:

  该对象只能操作文件,所以构造函数接收两种类型的参数:a.字符串文件路径;b.file对象。

  该对象既可以对文件进行读操作,也能进行写操作,在进行对象实例化时可指定操作模式(r,rw)

  注意:该对象在实例化时,如果要操作的文件不存在,会自动创建;如果文件存在,写数据未指定位置,会从头开始写,即覆盖原有的内容。 可以用于多线程下载或多个线程同时写数据到文件。

【javaio流学习总结】相关文章:

时光流影创意标语10-12

水不往低处流作文02-18

甲流防控工作总结报告范文06-06

对标一流述职报告08-11

单位通知甲流休假通知04-03

预防甲流的广播稿10-11

泥石流应急方案通用06-15

预防甲流的宣传语06-15

防控甲流宣传标语03-13

泥石流有哪些征兆11-15