io流的简单总结

来源:互联网 发布:易语言图片压缩源码 编辑:程序博客网 时间:2024/04/30 20:13
 

数据流分为输入流(InputStream)和输出流(OutputStream)

InputStream属于字节输入类,System.in 作为字节输入流类InputStream 的对象in 实现标准的输入,其中有read方法从键盘接收数据;

 

InputStream的子类FileInputStream(文件字节输入流类)

FileInputStream用于顺序访问本地文件,读取原始字节流。

如:FileInputStream fis = new FileInputStream(“存放文件的路径”);

FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定。而FileInputStream(String name)通过文件系统中的路径名name 指定。

//一个File的简单运用

File file = new File(fd.getDirectory(),fd.getFile());//获取此文件对话框的目录,根据指定的路径中的文件返回相应的File对象

FileInputStream现阶段最常见的两个方法close()和read()

 

OutputStream  属于字节输出类,System.out 作为打印流类PrintStream的对象out实现标准输出,其中有print和println两个方法;System.err 与System.out相同,而System.out是实现PrintStream的对象out的标准输出,System.err是实现标准的错误输出。

OutputStream的子类FileOutputStream(文件字节输出流)

用于将数据写入File或FileDescriptor的输入流。

例如:FileOutputStream fos = new FileOutputStream(“文件路径”);

Fos.write(“hell world”);

主要的方法有close()和write()

 

 

 

Reader类和Writer类

它们专门处理字符流,这两类都是抽象类.

Reader常见的方法:int read():读取一个字符。返回的是读到的那个字符,如果读到流的末尾,返回-1。int read(char[]):将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装的元素的个数。如果读到流的末尾,返回-1。Close():读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。

 

Reader的子类FileReader:

用于读取文本文件的流对象,用于关联文本文件。(读取字符文件)

例如:FileReader fr = new FileReader(“文本文件”);

在使用FileReader操作文本数据时,该对象使用的是默认的编码表,如果要使用指定的编码表时,必须使用转换流。

FileReader fr = new FileReader(”a.txt”);//文本文件中的数据使用的是本系统默认的GBK

等同于InputStreamReader isr = new InputStreamReader(new FileInputStream(“a.txt”));

如果a.txt中的文件中的字符数据是通过utf-8的形式编码。那么在读取时,必须指定编码表并使用转换流InputStreamReader isr = new InputStreamReader(new FileInputStream(“a.txt”),”urf-8”);

 

字符流的缓冲区BufferedReader

特有方法:readLine():一次读一行,把字符数据作为字符串返回

例如:

BufferedReader bufr = new BufferedReader(new FileReader(“buf.txt”));

String line = null;

While((line=bufr.readLine())!=null){}

Writer中的常见的方法:write(ch):将一个字符写入到流中;write(char[]):将一个字符数组写入到流中。Write(String)将一个字符串写入到流中。Flush():刷新流,将流中的数据刷新到目的地中,流还存在。Close():关闭资源:先关闭前会先调用flush,刷新流中的数据去目的地。然后流关闭。

 

FileWriter://用法

FileWriter fw = new FileWriter(“demo.txt”);

         Fw.write(“safsd”);

BufferedWriter:

特有的方法:newLine():跨平台的换行符。

建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数。

bufferedWriter bufw = new BufferedWriter(new FileWriter(“buf.txt”));

bufw.write(:absd”);//将数据写入到了缓冲区

bufw.flush();//对缓冲区的数据进行刷新。将数据刷到目的地中。

bufw.close();/关闭缓冲区,其实关闭的是被包装在内部的流对象。

 

 

 

字节缓冲流 BufferedInputStream 和 BufferedOutputStream

BufferedInputStream为另一个输入流添加一些功能,在创建BufferedInputStream时,会创建一个内部缓冲区数组。

例如:FileInputStream fis = new FileInputStream(“”);

BufferedInputStream bis = new BufferedInputStream(fis);

DateInputStream dis = new DataInputStream(bis);

BufferedOutputStream:该类实现缓冲的输出流。

例如:FileOutputStream fos = new FileOutputStream(“”);

BufferedOutputStream bos = new BufferedOutputStream(fos);

DateOutputStream dos = new DataOutputStream(bos);

主要的方法:flush():刷新此缓冲的输出流;write():将指定的字节写入缓冲的输入流。

 

 

 

打印流PrintStream:为其他输入流添加了功能,使它们能够方便的打印各种数据值表示形式。打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用PrintWriter类。

//既有自动刷新,又可执行编码

PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(“a.txt”),”utf-8”),true);//该自动刷新值为true时,只有三个方法可以用:println,printf,format。

//提高效率并且使用打印方法

PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“a.txt”),”utf-8”)),true);

 

 

 

管道流:PipedInputStream和PipedOutputStream

可以将管道输出流接到管道输入流来创建通信管道,通常两个流在使用的时候,需要加入多线程技术,也就是让读写同时运行。

 

 

 

合并流SequenceInputStream:它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,然后再读取第二个输入流,直到最后一个输入流。

例如:FileInputStream fis1 = new FileInputStream(“res/a.txt”);

      FileInputStream fis1 = new FileInputStream(“res/b.txt”);

      SequenceInputStream sis = new SequenceInputStream(fis1,fis2);

 

 

 

编码转换:

字符串—>字节数组:编码。通过getBytes(charset);

字节数组à字符串:解码。通过String类的构造函数完成。String(byte[],charset);

原创粉丝点击