IO-字节输出流-FileOutputStream
字节流
基本操作与字符流相同
但是它不仅可以操作字符,还可以操作其他的媒体文件
例程一个Jpg文件
java.io
类 OutputStream
public abstract class OutputStream
此抽象类是表示输出字节流的所有类的超类。
java.io
类 FileOutputStream
public class FileOutputStream extends OutputStream
字节流使用的是字节数组缓存区
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。
package day20.io.p1.ByteStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamDeam {
private static FileOutputStream fos;
private static FileInputStream fis;
public static void main(String[] args) throws IOException {
//writeFile();
readFile();
readFile2();
}
public static void readFile2() throws IOException {
fis = new FileInputStream("temp\\fos.txt");
//创建一个缓冲区,缓冲读到的字节,字节流使用的肯定是字节数组
/*System.out.println(fis.available());//获取文件的字节数,可以创建一个大小刚好的缓冲区
//文件过大的时候,用fis.available() 作为缓冲区的长度是不准确的,内存容易溢出,危险
byte[] buf2 = new byte[fis.available()];
fis.read(buf2);
System.out.println(new String(buf2));
*/
//以1024倍数的方法建立数组大小比较安全
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
fis.close();
} public static void readFile() throws IOException {
/*
* 读取一个文件,必然要用输入流
* 找一个能操作文件的字节输入流
*/
fis = new FileInputStream("temp\\fos.txt");
int by = 0;
while((by = fis.read())!=-1){
System.out.println((char)by);
}
}
public static void writeFile() throws IOException {
/*
* 将内存中的数据写到硬盘上
* 1.输出
* 2.文件
* 3.因为要演示字节流,所以要找一个能处理文件的字节输出流
*/
fos = new FileOutputStream("temp\\fos.txt");
//使用流对象的write方法,将数据写到目的地
byte[] buf = "abc".getBytes();
fos.write(buf);//没有刷新和关闭,数据直接写到了目的地
//字符流底层用的是字节流,字符流中有缓冲区,
//字符流要操作文本型的字节数据的时候,多了个动作---查表,
//要查表,必须先把多个字节缓冲起来,查个表,才能出现相应的字符
//字节流原封不动的将原始字节写到目的地,它需要缓冲吗?它不需要。
//字节流要关闭吗?要关闭,因为关闭的主要目的是释放资源,字符流中的关闭有刷新和释放资源的双重作用。
fos.close();
}
}
原文:http://pengya123.blog.51cto.com/8467424/1792353