一 点睛
字符流处理的对象是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!!!