Java学习之字节流InputStream和OutputStream归纳总结

Java学习之字节流InputStream和OutputStream

一、InputStream的子类及其使用场景

1 . AudioInputStream

使用场景:

  • 从外部音频文件、流或URL获得 一个音频流
  • 从音频输入流中写入外部文件
  • 将音频输入流转换为其他音频格式

2.ByteArrayInputStream

在字节数组和流之间搭建桥梁。

将字节数组作为字节流的数据源

举例:

import java.io.*;
public class ByteArrayStream {
   public static void main(String[] args){
     byte[] b = "hello".getBytes(); 
     ByteArrayInputStream bais = new ByteArrayInputStream(b); 
     int n =0;
     while((n = bais.read())!=-1){
        System.out.print((char)n); //hello
     }
   }
}

3.FileInputStream

在文件和流之间搭建桥梁。

以文件路径名字构造一个文件输入流,打开一个与实际文件的连接,用于从该流中读取文件字节流

举例:

package chap14_2;
import java.io.*;
public class OpenFile {
    public static void main(String args[]) throws IOException{
        try{                                        //创建文件输入流对象
            FileInputStream  rf = new FileInputStream("OpenFile.java");
            int n=512,c=0;
            byte buffer[] = new byte[n];
            while ((c=rf.read(buffer,0,n))!=-1 ){   //读取输入流
                System.out.print(new String(buffer,0,c));
            }            
            rf.close();                            //关闭输入流
        }
        catch (FileNotFoundException ffe){
            System.out.println(ffe);}
        catch (IOException ioe){
            System.out.println(ioe);
        }
    }
}

4.FilterInputStream

FilterInputStream包含一些其他输入流,它将其用作其基本数据源,可能在此过程中转换数据或提供其他功能。FilterInputStream本身只需使用将所有请求传递给包含的输入流的版本覆盖InputStream的所有方法。FilterInputStream的子类可能会进一步覆盖其中一些方法,也可能提供其他方法和字段。

5.ObjectInputStream

ObjectInputStream用于恢复之前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或用于在远程通信系统中整理和取消整理参数和参数。

确保从流创建的图表中所有对象的类型与Java虚拟机中的类匹配。使用标准机制按要求加载类。

6.PipedInputStream

通常用于将一个程序的输出连接到另一个程序的输入。输出流作为管道的发送端,输入流作为管道的接收端。使用前需要调用connect方法将输出流和输入流连接起来。通常一个线程执行管道输出流的写操作,另一个线程执行管道输入流的读操作。

举例:

import java.io.IOException;  
import java.io.PipedInputStream;  
import java.io.PipedOutputStream;  
public class PipedStream {
public static void main(String[] args) throws IOException {  
      PipedInputStream in = new PipedInputStream();  
      PipedOutputStream out = new PipedOutputStream();  
      in.connect(out);  
      new Thread(new Input(in)).start();  
      new Thread(new Output(out)).start();  
    }  
} 

7.SequenceInputStream

SequenceInputStream表示其他输入流的逻辑串联。它从有序的输入流集合开始,从第一个流读取到文件结束,然后从第二个流读取,依此类推,直到在最后一个包含的输入流上到达文件结束。

二、OutputStream的子类及使用场景

1.ByteArrayOutputStream

在字节数组和流之间搭建桥梁。

构造一个字节数组输出流,用于将多个字节写入到流中,最后可以整体转为一个字节数组

举例:

import java.io.*;
public class ByteArrayStream {
 public static void main(String[] args){
  byte[] b = "hello".getBytes(); 
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  baos.write(b, 0, b.length);
  System.out.println(new String(baos.toByteArray()));
 }
}

2.FileOutputStream

在文件和流之间搭建桥梁。

以文件路径名字构造一个文件输出流,打开一个与实际文件的连接,用于文件的写字节流操作

举例:

import java.io.*;
public class Write1 {
    public static void main(String args[]){
        try{
            System.out.print("Input: ");
            int count,n=512;
            byte buffer[] = new byte[n];
            count = System.in.read(buffer);        //读取标准输入流
            FileOutputStream  wf = new FileOutputStream("Write1.txt");
                                                   //创建文件输出流对象
            wf.write(buffer,0,count);              //写入输出流
            wf.close();                            //关闭输出流
            System.out.println("Save to Write1.txt!");
        }
        catch (FileNotFoundException ffe){
            System.out.println(ffe);}
        catch (IOException ioe){
            System.out.println(ioe);} }
}

3.FilterOutputStream

FilterOutputStream类本身只需使用将所有请求传递给基础输出流的版本来覆盖OutputStream的所有方法。FilterOutputStream的子类可能会进一步覆盖其中一些方法,并提供其他方法和字段。

4.ObjectOutputStream

ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。可以使用ObjectInputStream读取(重新构建)对象。对象的持久存储可以通过为流使用文件来实现。如果流是网络套接字流,则可以在其他主机或其他进程中重新构建对象。

5.PipedOutputStream

通常用于将一个程序的输出连接到另一个程序的输入。输出流作为管道的发送端,输入流作为管道的接收端。使用前需要调用connect方法将输出流和输入流连接起来。通常一个线程执行管道输出流的写操作,另一个线程执行管道输入流的读操作。

举例:

import java.io.IOException;  
import java.io.PipedInputStream;  
import java.io.PipedOutputStream;  
public class PipedStream {
public static void main(String[] args) throws IOException {  
      PipedInputStream in = new PipedInputStream();  
      PipedOutputStream out = new PipedOutputStream();  
      in.connect(out);  
      new Thread(new Input(in)).start();  
      new Thread(new Output(out)).start();  
    }  
} 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值