2021-04-13

IO

转换流

1. InputStreamReader和2.OutputStreamWriter

  1. 将字节输入流转换为字符输入流
  2. 将字节输出流转换为字符输出流
    应用场景:System.in(在System类下有一个静态的成员变量叫in)是字节流对象,代表键盘的输入,如果我们想按行接收用户的输入时,就i必须要用到 缓冲字符流BufferedReader特有的方readerLine(),但是创建BufferedReader的构造方法的参数必须是一个Reader对象,此时就要用到InputStreamReader,同样,System.out也是字节流对象, 按行显示时也要用OutputStreamWriter。
    下面这个例子是自己实现一个简单的输入和显示过程:
import java.io.*;

public class ConvertStream {
	public static void main(String[] args) {
		BufferedReader br=null;   //定义输入缓冲流
		BufferedWriter bw=null;
		try {
			//InputStreamReader也是一种处理流,将字节输入流转化为字符输入流
			br=new BufferedReader(new InputStreamReader(System.in));
			//
			bw=new BufferedWriter(new OutputStreamWriter(System.out));
			String s=br.readLine();
			bw.write(s);
			bw.flush();
			//System.out.println(s);
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			try {
				if(br!=null)
					br.close();
				if(bw!=null)
					bw.close();
			}catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		}
	}
}

这样就实现了一个简单键盘读入并输出的功能。

字节数组流

ByteArrayInputStream和ByteArrayOutputStream

ByteArrayInputStream:是将字节数组的数据读入到流中。看例子:

import java.io.ByteArrayInputStream;

public class ByteArrayInputDome {
    public static void main(String[] args) {
        byte[] arr="abcdefgh".getBytes();  //返回一个字节数组
        ByteArrayInputStream bis=null;
        StringBuffer sb=new StringBuffer();
        try{
            //该构造方法的参数是一个字节数组,这个字节数组就是数据源
            bis=new ByteArrayInputStream(arr);
            int temp=0;
            while ((temp=bis.read())!=-1){
                sb.append((char) temp);
            }
            System.out.println(sb.toString());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try{
                bis.close();  //资源关闭
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

同样利用ByteArrayOutputStream可以将数据写入字节数组当中:

import java.io.ByteArrayOutputStream;

public class ByteArrayOutputDome {
    public static void main(String[] args) {
        ByteArrayOutputStream bos=null;
        try{
            bos=new ByteArrayOutputStream();
            bos.write('a');
            bos.write('b');
            bos.write('c');
            byte[] arr=bos.toByteArray();
            for (byte i:arr) {
                System.out.println((char) i);
            }

        }finally {
            try{
                if (bos!=null){
                    bos.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值