Java 字节流

目录

 

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();
		}
		

	}

}

例题:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值