目录
Java 字节流
文件输入流:FileInputStream()
文件输出流,FileOutputStream()
缓冲流
例题:
Java 字节流
字节流适用于:二进制文件的读取,或者用于读取图像数据之类的原始字节流
常用的
字节输入流
FileInputStream(文件输入流)
BufferedInputStream(缓冲输入流)
ObjectInputStream(对象输入流)
字节输出流
FileOutputStream(文件输出流)
BufferedOutputStream(缓冲输出流)
ObjectOutputStream(对象输出流)
文件输入流:FileInputStream()
1.从文件系统中的某个文件中获得输入字节
2.用于读取图像数据之类的原始字节流
读数据:
1、FileInputStream的主要方法(参见下图)
2、read 返回值 -1表示读到了末尾
======================================================================
imooc.txt中存放的内容
输出结果
以上源码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo1 {
public static void main(String[] args) {
//创建一个FileInputStream对象
try {
FileInputStream fis=new FileInputStream("imooc.txt");
// int n=fis.read();
int n=0;
// while(n!=-1){
// System.out.print((char)n);
// n=fis.read();
// }
while((n=fis.read())!=-1){
System.out.print((char)n);
}
fis.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo2 {
public static void main(String[] args) {
// 创建一个FileInputStream对象
try {
FileInputStream fis = new FileInputStream("imooc.txt");
byte[] b=new byte[100];
fis.read(b,0,5);
System.out.println(new String(b));
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果
输出结果
文件输出流,FileOutputStream()
写数值和字符
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo {
public static void main(String[] args) {
FileOutputStream fos;
FileInputStream fis;
try {
fos = new FileOutputStream("imooc.txt",true);
fis=new FileInputStream("imooc.txt");
fos.write(50);
fos.write('a');
System.out.println(fis.read());
System.out.println((char)fis.read());
fos.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
复制图片:
n用来接收read方法的返回值。 read方法的返回值是:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo1 {
public static void main(String[] args) {
// 文件拷贝
try {
FileInputStream fis=new FileInputStream("happy.gif");
FileOutputStream fos=new FileOutputStream("happycopy.gif");
int n=0;
byte[] b=new byte[1024];
while((n=fis.read(b))!=-1){
fos.write(b,0,n);
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
缓冲流
缓冲流,在BufferedOutputStream和在BufferedInputStream是不能直接读写数据的。
FileOutputStream和FileInputStream是直接从磁盘中读写数据,速度比较慢。使用容缓冲流,先将数据从从盘中读入缓冲流,在利用FileInputStream在程序中显示使用,写也是相同,先进缓冲流,再进磁盘。
输出缓冲流的构造函数BufferedOutputStream(OutputStream out),参数是OutputStream的子类。FileOutputStream先将写入的数据存储在BufferedOutputStream的字节数组中,BufferedOutputStream再一次性输出,提高了字节的写入速率。
缓冲流:缓冲流读文件过程如下:
FileInputStream把文件读取出来 不是直接读取到程序当中进行接收 而是通过一个缓冲的流 下一个通道继续读取 再通过缓冲流 流入到字节数组当中 而被我们的程序读取到
缓冲区满了会自动执行写操作,缓冲区不满就不会进行写操作,这时候需要调用flush()或者close()方法强制清空缓冲区,才会正常写入到文件。
缓冲流写:
缓冲流读:
使用close或者flush强制清空缓冲区才能将数据从磁盘读入程序中使用
以上源码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedDemo {
public static void main(String[] args) {
try {
FileOutputStream fos=new FileOutputStream("imooc.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
FileInputStream fis=new FileInputStream("imooc.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
long startTime=System.currentTimeMillis();
bos.write(50);
bos.write('a');
bos.flush();
System.out.println(bis.read());
System.out.println((char)bis.read());
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
fos.close();
bos.close();
fis.close();
bis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}