Java的字节流和字符流

一 点睛

字符流处理的对象是Unicode字符,每个Unicode字符占据2个字节,而字节流输入输出的数据是以单个字节为读写单位。字符流由Java虚拟机将单个字节转化为2个字节的Unicode字符。

如果要处理一段二进制数据,如音频、视频及图像等,写入某个设备,或者从某个设备读取一段二进制数据,使用字节流操作进行读写,则更为方便。

InputStream和OutputStream被设计成字节流类,而Reader和Writer则被设计为字符流类。

处理字符或字符串应该使用字符流类,处理字节或二机制对象时应使用字节流类。

一般在操作文件流时,不管是字节流还是字符流,都可以按照下面的流程进行:

  • 使用File类找到一个要操作的对象

  • 通过File类的对象去实例化字节流或字符流的子类

  • 进行字节(字符)的读写操作

  • IO流属于资源操作,操作的最后必须关闭。

二 字节输入流和输出流实战

1 代码

import java.io.InputStream ;
import java.io.OutputStream ;
import java.io.FileInputStream ;
import java.io.FileNotFoundException ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.File ;

public class StreamDemo
{
    public static void main(String args[])
    {
        File f = new File("d:\\temp.txt") ;
        OutputStream out = null ;
        try
        {
            out = new FileOutputStream(f) ;
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace() ;
        }
        // 将字符串转成字节数组
        byte b[ ] = "Hello World!!!".getBytes() ;
        try
        {
            // 将byte数组写入到文件之中
            out.write(b) ;
        }
        catch (IOException e1)
        {
            e1.printStackTrace() ;
        }
        try
        {
            out.close() ;
        }
        catch (IOException e2)
        {
            e2.printStackTrace() ;
        }

        // 以下为读文件操作
        InputStream in = null ;
        try
        {
            in = new FileInputStream(f) ;
        }
        catch (FileNotFoundException e3)
        {
            e3.printStackTrace() ;
        }
        // 开辟一个空间用于接收文件读进来的数据
        byte b1[ ] = new byte[1024] ;
        int byteCount = 0 ;
        try
        {
            // 将b1的引用传递到read()方法之中,同时此方法返回读入数据的个数
            byteCount = in.read(b1) ;
        }
        catch (IOException e4)
        {
            e4.printStackTrace() ;
        }
        try
        {
            in.close() ;
        }
        catch (IOException e5)
        {
            e5.printStackTrace() ;
        }
        // 将byte数组转换为字符串输出
        System.out.println(new String(b1, 0, byteCount)) ;
    }
}

2 运行

Hello World!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值