黑马程序员----【javaSE基础】IO--字节流

来源:互联网 发布:c语言进程的创建 编辑:程序博客网 时间:2024/05/01 18:10

 ------- android培训、java培训、期待与您交流! ----------

一、

流有输入和输出,字节流是说输入和输出的都是字节形式,它们是用来处理非文本文件的,如图片,音频,视频等。
最基础的两个字节流是:InputStream和OutputStream。
InputStream构造方法:
InputStream() ;
InputStream的常用方法:
abstract int read(); int read(byte[] b);void close();
OutputStream的构造方法:
OutputStream();
OutputStream的常用方法:
abstract void write(int n); 这里的参数是int型,但是处理的都是字节,记住这里写的是数据n的低八位,也就是一个字节的数据。
void write(byte[] b); void flush();void close();

二、
InputStream的常用子类:FileInputStream,ObjectInputStream,BufferedInputStream。
1.FileInputStream是文件输入流。流是用来处理输入输出的数据,最基本的方式就是处理硬盘上的文件,FileInputStream就是文件输入流,把数据从文件输入到程序中。
其常用的构造方法有:FileInputStream(File file) ;FileInputStream(String name) ;
其常用的方法有:abstract int read();int read(byte[] b);void close();
构造方法有可用之处,但是其他方法和父类一样。
2.BufferedInputStream是缓冲输入流,顾名思义,提供缓冲,增加效率。虽然在父类中,我们用read(byte[] b)方法也可实现缓冲,提高效率,但是BufferedInputStream的使用更方便。另外需要注意的是,BufferedInputStream并不是InputStream的直接子类,它们之间有一个叫FilterInputStream的类,它本身并没有特殊的地方,只是重写父类的方法,但它的子类有许多可取之处。
其常用构造方法:BufferedInputStream(InputStream in) ;
其常用方法:abstract int read();int read(byte[] b);void close();
它的特殊的地方在于,它的构造方法,需要传入一个字节输入流,而且他本身实现了缓冲技术,所以尽管一些方法和父类一样,但效率会高。
3.ObjectInputStream是对象处理流,它可以直接读一个对象,包括基本对象和引用对象。
其常用构造方法:ObjectInputStream(InputStream in) ;
其常用方法:
readByte();readChar();等读取基本类型的方法。
String readUTF();这是这个类最精彩的地方,他有一个读取一个字符串的方法,这个方法是输入字节流中唯一的一个能够读取一个字符串的方法。

三、
OutputStream的常用子类:FileOutputStream,ObjectOutputStream,BufferedInputStream,PrintStream。
1.FileOutputStream是文件输出流。把数据从程序输出到文件中。
其常用构造方法:
FileOutputStream(File file);FileOutputStream(String name) ;FileOutputStream(String name, boolean append) 
前两个方法和输入流相似,第三个方法有另一个参数boolean append,其值如果为true,则在文件尾部续写,为false则覆盖文件。
其常用方法:abstract void write(int n); void write(byte[] b);void flush();void close();
常用方法和父类相似。
2.BufferedInputStream是输出缓冲流,可以提高效率。他的直接父类也不是OutputStream,中间有一个FilterOutputStream。
其常用构造方法:BufferedOutputStream(OutputStream out) 
其常用方法:void flush()等。
其构造方法需要传入一个字节输出流,其他方法和父类虽和父类相同,但提高了效率。
3.ObjectOutputStream,对象输出流,可以直接处理对象。
其构造方法:ObjectOutputStream(OutputStream out) 
其常用方法:
wirte(byte b);write(int n);等
writeUTF(String s)可以直接输出一个字符串,这也是他最精彩的地方。
4.PrintStream,是输出打印流,他的直接父类也不是OutputStream,中间有一个FilterOutputStream
其构造方法:PrintStream(File file);PrintStream(OutputStream out) ;PrintStream(String fileName) ;
PrintStream(OutputStream out, boolean autoFlush) 这个方法表示,如果第二个参数为true,则自动刷新,不需要flush()。
其常用方法:print(int i);print(char c);print(String s)
println();println(int i);println(char c);println(String s);
这个方法最精彩的地方就是可以方便的输出各种数据。

四、实现数据输入输出的代码,功能实现把一张图片读入程序,再输出到另一个地方,实现复制。
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class StreamDemo { public static void main(String[] args) {  FileInputStream fis = null;  FileOutputStream fos = null;  try {   fis = new FileInputStream("D:\\1.jpg");   fos = new FileOutputStream("D:\\2.jpg");   copy4(fis,fos);  } catch (FileNotFoundException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  }finally{   try {    fis.close();    fos.close();   } catch (IOException e) {    e.printStackTrace();   }  } }  public static void copy4(FileInputStream fis,FileOutputStream fos)   throws IOException{  BufferedInputStream bis = new BufferedInputStream(fis);  BufferedOutputStream bos = new BufferedOutputStream(fos);  int ch = 0;  while((ch=bis.read()) != -1){   bos.write(ch);  } }}

System.in,接受键盘的输入,其类型是InputStream。
System.out,输出到控制台,其类型是PrintStream。
也就是说可以用上面讲过的方法处理System.in和System.out。

 ------- android培训、java培训、期待与您交流! ----------

原创粉丝点击