Java字节流 从文件输入输出到文件过程解析
假如需要复制一张图片,一份word,一个rar包。可以以字节流的方式,读取文件,然后输出到目标文件夹。
以复制一张4M的图片举例。
每次读一个字节:
ch=(char)System.in.read();//读入一个字符,返回读到的字节的int表示方式,读到末尾返回-1
复制时候一个字节一个字节的读取、写入,这样是很慢的。设置一个用来缓冲的字符数组,会让复制的过程快很多(每次读入的字节变多)。
方便阅读,类的名称用中文描述
importjava.io.*;
publicclass字节流的缓冲区{
publicstaticvoidmain(String[]args)throwsException{
FileInputStreamin=newFileInputStream("E:\\photo\\IMG.jpg");
//FileOutputStream中的文件不存在,将自动新建文件
OutputStreamout=newFileOutputStream("E:\\test.jpg");
byte[]buff=newbyte[1024];
intb;
longbeginTime=System.currentTimeMillis();
while((b=in.read(buff))!=-1){
out.write(buff,0,b);
}
longendTime=System.currentTimeMillis();
System.out.println("运行时长为:"+(endTime-beginTime)+"毫秒");
in.close();
out.close();
System.out.println("正常运行!");
}
}
这里设置的字节数组是1024个字节。复制的时间比一个字节一个字节的复制快很多。
//封装了FileOutputStream管道之后,三种函数参数 //write(b)写入一个b //write(byte[]b)将字节数组全部写入 //write(byte[]b,intoff,intlen)例如write(byteTest,0,len)表示数组byteTest中从0开始长度为len的字节 //一般都用第3个
字节缓冲流
用BufferedInputStream和BufferedOutputStream来封装FileInputStream和FileOutputStream
方便阅读,类的名称用中文描述
importjava.io.*;
publicclass字节缓冲流{
publicstaticvoidmain(String[]args)throwsException{
BufferedInputStreambis=newBufferedInputStream(newFileInputStream("E:\\photo\\IMG.jpg"));
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("E:\\test.jpg"));
intlen;
longbegintime=System.currentTimeMillis();
while((len=bis.read())!=-1){
bos.write(len);
}
longendtime=System.currentTimeMillis();
System.out.println("运行时间为:"+(endtime-begintime)+"毫秒");
bis.close();
bos.close();
System.out.println("正常运行");
}
}
将String类的对象用字节流写入文件时
importjava.io.*;
publicclassoutFile{
publicstaticvoidmain(String[]args)throwsException{
FileOutputStreamout=newFileOutputStream("example.txt");
Stringstr="测试";
byte[]b=str.getBytes();
for(inti=0;i
当需要以附加的形式写入文件时
FileOutputStreamout=newFileOutputStream("example.txt",true);
转换流
BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));
Stringx=in.read();
InputSteamReader和OutputStreamReader为转换流,前者将字节流转化为字符流,后者将字符流转化为字节流
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。