高级API 快速入门之第二章 字节流&缓冲流

一:IO流的分类

1.按数据流的方向:输入流、输出流 

      输入与输出是相对于应用程序而言的,比如文件读写,读取文件是输入流,写文件是输出流 。

2.按处理数据单位:字节流、字符流

     字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

3.按功能:节点流、处理流

    节点流:直接操作数据读写的流类,比如FileInputStream

    处理流:对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能,例如BufferedInputStream(缓冲字节流)
 

二:字节流

概念:

 一次可以读取一个字节 或者写入一个字节 (写入字节数组以及读取字节数组)

字节流的老祖宗:
        InputStream(字节输入流——读取内容)
        OutputStream(字节输出流——写入内容)

 

字节流下的具体子实现类:

  • FileInputStream:以字节的方式将磁盘中的文本文件中的内容读取到Java程序中 
  • FileOutputStream:以字节的方式将Java程序中生成的数据写入到电脑磁盘中
  • 针对文本文件的操作

  • 读取磁盘中的内容

      通过FileInputStream的构造函数可以实现

FileInputSteam(file)

    1.构建一个File对象指定磁盘下指定读取的文件路径

File file = new File("D:\\情书.txt");

2.构建FileInputStream对象以此将file对象传递到

 该构造函数内后可以直接通过流的方式进行读取文件中的内容到java程序中进行显示

FileInputStream fis = new FileInputStream(file);

  • 一次读取一个字节
int n = fis.read();
		while(n!=-1) {
			System.out.print((char)n);
			n = fis.read();
		}
		
		int n = 0;//定义一个变量存储每次读取的字节内容
		while(-1!=(n = fis.read())) {
			System.out.print((char)n);
		}
		
		

  • 一次读取一个字节数组
byte[] bys = new byte[1024];
		
		int n = 0;
	while(-1!=(n = fis.read(bys))) {
			System.out.println(new String(bys).trim());
			System.out.println(new String(bys, 0, n));
		}

  • Java程序运行后,将指定的内容通过FileOutputSteam对象写入到磁盘指定的文件内
  • FileOutputSteam(file) 构造函数   输出流  负责写入数据
  • 写入数据write
File file = new File("D:\\鑫鑫.txt");
	//新建FileOutputStream()
		FileOutputStream fos = new FileOutputStream(file);
fos.write(97);
	System.out.println("写入成功");
  • 一次性写入一个字节数组
	String str = "mynameisxinxin";
		//getBytes()将字符串转换成字节数组
		fos.write(str.getBytes());
		System.out.println("写入成功");
		//关闭所有流的资源
    	fos.close();
		

重点:解决文件写入重复操作后覆盖的问题。

         解决方案:先读取  后拼接 最后一起写入即可

		File file = new File("D:\\鑫鑫.txt");
		//输入流   读取
		FileInputStream fis = new FileInputStream(file);
		//一次读取一个字节数组
		String content = "";
		byte[] bys = new byte[1024];
	   int len = 0;
		while(-1!=(len = fis.read(bys))) {
			System.out.println(new String(bys,0,len));
			content+=new String(bys,0,len);
		}
		System.out.println(content);
		
		//输出流  写入
		FileOutputStream fos = new FileOutputStream(file);
		String result = content+"\nabcdefg";
		fos.write(result.getBytes());
	System.out.println("写入成功");
		//关闭所有流资源
  • 高效字节缓冲流

  • BufferedInputStream  缓冲字节输入流   读取

  • BufferedOutputSteam  缓冲字节输出流   写入

这2个缓冲流比FileInputStream以及FileOutputStream要高效。

案例:演示高效字节缓冲流操作方法

		File file = new File("D:\\鑫鑫.txt");
		FileInputStream fis = new FileInputStream(file);
		
		BufferedInputStream bis = new BufferedInputStream(fis);
		int read = bis.read();
		System.out.println((char)read);
		
		int len = 0;
		while(-1!=(len = bis.read())) {
			System.out.print((char)len);
		}
		
		
		
		
		File file = new File("D:\\鑫鑫2.txt");
		FileOutputStream fos = new FileOutputStream(file);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		bos.write(new String("hello").getBytes());
		
		bos.close();
		fos.close();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值