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

 ------- 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培训、期待与您交流! ----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值