字节流&缓冲流

IO流:
    对文件进行读取和写入  通过流的方式(类似河流)
    将数据从某端-----》某端


Java将IO流进行系统的分类:

    1.通过流的方向进行分类
        输入流:读取操作
        输出流:写入操作

    2.通过流的类型进行分类
        字节流:一次读取一个字节,或者写入一个字节
        字符流:一次读取一个字符,或者写入一个字符

        (1)一个字符 = 2个字节
        (2)文件类型:txt,mp3,mp4,jpg
        (3)字节流专门是用来处理非文本文件的
        (4)字符流专门用来处理文本文件。

    3.通过流的处理方式进行分类
        节点流:效率不高
        处理流:效率高

-----课程体系------按照流的类型进行扩展


    今日内容:字节流

    字节流的老祖宗
        字节输入流——读取内容
            Java类——InputStream
        字节输出流——写入内容
            Java类——OutputStream

    通过字节流中的某个子类来对象昨天File类的进行一个操作
        将内容写入文件内。
        将文件内的容器读取到Java程序中
    
    针对文件开辟的2个字节流(输入流   输出)

        文件字节输入流
            Java类:  FileInputStream

        文件字节输出流
            Java类: FileOutputStream


    通过FileInputStream和FileOutputStream对文件进行读取和写入的基本流程
        
        1.通过File类构建一个文件
        2.将file对象传递到流的构造函数中
        3.通过流对象调用读取或者写入的方法即可
        4.关闭所有流的资源

文件输出流 (写入)

package com.zking.test;

import java.io.File;
import java.io.FileOutputStream;

/*
 * 文件输出流  FileOutputStream
 */
public class StreamDemo_02 {

	public static void main(String[] args) throws Exception {
		//写入内容到文件
		//1.构建File对象
		File file = new File("D:\\ty.txt");
		/**
		 * FileOutputStream输出流会自动创建文件
		 */
		//2.将file对象放入流对象中----输出流FileOutputStream
		FileOutputStream fos = new FileOutputStream(file);
		//3.提供写入的数据
		//a
//		char sb = 'a';
		//通过fos对象写入数据
//		fos.write(sb);
		
		//一次写入一个字节数组
		String str = "我是你哥";
		fos.write(str.getBytes());
		
		System.out.println("写入成功");
		//4.关闭资源
		fos.close();
		
		//问题:会覆盖//解决方案:先读后写
		

	}

}

文件输入流 (读取)

package com.zking.test;

import java.io.File;
import java.io.FileInputStream;

public class StreamDemo {
	public static void main(String[] args) throws Exception{
		/**
		 * 字节流
		 * 		FileInputStream
		 * 		FileOutputStream
		 */
		//通过IO流的方式将D:\\xwj.txt中的内容读取出来打印输出在控制台上进行显示
		
		//1.通过File对象绑定一个路径
		File file = new File("D:\\xwj.txt");
		//2.读取--FileInputStream
		//将file对象传递到输入流的构造函数中即可  构造----异常
		FileInputStream fis = new FileInputStream(file);
		//3.通过流对象调用读取的方法将内容读取到
//		int n = fis.read();//没有参数,一次读取一个字节
//		System.out.println((char)n);//a
//		//可以再次读取吗?  可以——不需要指定下一个,自动下一个(指针-C)
//		int n2 = fis.read();
//		System.out.println((char)n2);//b
//		int n3 = fis.read();
//		System.out.println(n3);//-1
		
		//通过循环操作进行简化
		/*
		while(true) {//因为内容不确定    死循环
			//读取一个字节
			int n = fis.read();
			//先判断后打印
			if(n == -1) {
				System.out.println("读完了...没了");
				break;
			}
			System.out.print((char)n);
		}
		*/
		//最简化的
//		int len = 0;//将来读取一个字节后将内容保存到该变量中
//		while((len = fis.read())!=-1) {//读取一个后,后面会自动指向下一个
//			System.out.print((char)len);
//		}
		
		/**
		 * 字节数组-----》字符串
		 * 	new String(byte[] bytes)
		 * 
		 * 	getBytes();
		 */
		
		//读取一个字节数组
		byte[] buf = new byte[1024];
		int len = 0;
		while((len = fis.read(buf))!=-1) {
			//通过字符串的构造函数    每次从第一个开始,读取到len长度(下标)
			System.out.println(new String(buf,0,len));
		}
		
		
		//4.关闭所有流的资源
		fis.close();
		
		
		
	}
}

缓冲输入流   BufferedInputStream

 缓冲输出流  BufferedOutputStream

package com.zking.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件流的升级(节点流)----缓冲流(处理流)
 * 
 * 		文件缓冲流
 * 				缓冲输入流   BufferedInputStream
 * 				缓冲输出流  BufferedOutputStream
 *		
 *
 * 	缓冲流读和写  效果高  仅此而已
 * 
 * 		1.File构建
 * 		2.传入文件流对象
 * 		3.将文件流对象传入缓冲流即可---为了提高效率而已
 * 		4.读或写
 * 		5.关闭
 * 
 *
 */
public class BufferedDemo {

	public static void main(String[] args) throws Exception{
		//根据System类获取当前时间的毫秒值
		System.out.println(System.currentTimeMillis());
		//读取
		File file = new File("D:\\xwj.txt");
		FileInputStream fis = new FileInputStream(file);
		//将fis转换成缓冲流效果变高
		BufferedInputStream bis = new BufferedInputStream(fis);
		//读取
		int len = 0;
		while((len = bis.read())!=-1) {
			System.out.print((char)len);
		}
		bis.close();
		fis.close();
		System.out.println();
		System.out.println(System.currentTimeMillis());
		//写入
//		File file = new File("D:\\dyk.txt");
//		FileOutputStream fos = new FileOutputStream(file);
//		//缓冲
//		BufferedOutputStream bos = new BufferedOutputStream(fos);
//		//写入
//		bos.write("天天好心情".getBytes());
//		//关闭(流的顺序---从下往上)
//		bos.close();
//		fos.close();
		

	}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值