面向对象-心得体会之IO框架浅谈(一)

1.流的概念(基础)
流:内存与存储设备之间传输数据的通道。
输入模式
输出模式
流的作用就是提供通道。从而使用通道把源中的字节送到目的地。
2.流的分类:
(1)按照方向:
输入流:将<存储设备>中的内容入到<内存>中。
输出流:将<内存>中的内容***写***入到<存储设备>中。
(2)按单位:
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,只能读写文本数据
(3)按功能:
节点流:具有实际传输数据的读写功能。
过滤流:在节点流的基础之上增强功能。
3字节流
(1)字节流的父类(抽象类)
InputStream类和OutputStream类均是抽象类,分别是所有字节输入流或所有字节输出流的父类。
(2)字节节点流:
FileOutputStream:
public void Write(byte[] b)//一次写多个字节将b数组中所有字节,写入输出流。
FileInputStream:
public int read(byte [] b)//从流中读取多个字节,将读到内容存入数组b,返回实际读到的字节数;如果达到文件的尾部,则返回-1.
代码示例FileOutputStream:

package com.lz.t0;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestOutPutStream {

	public static void main(String[] args) throws IOException {//将异常抛出,也可以使用try-catch语句
		//1.输出字节流OutputStream
		//2.输出字节节点流 具有实际传输的功能(文件路径,Boolean append) true代表追加,不覆盖
		//路径正确,但是文件不存在,则会创建一个文件
		//绝对路径"D:\\java\\a.txt"必须存在
		//相对路径Files\\a.txt与上一种形式等价,相对于当前项目带的路径下,寻找该路径和文件
		FileOutputStream fos =new FileOutputStream("Files\\a.txt");
	//传输单个文字	
		String s="你好";
		
		byte[] bs =s.getBytes();
		
		fos.write(bs);
//		fos.write(65);//输出单个字节
//		fos.write(66);
//		fos.write(67);
//		
//		fos.write('D');//输出字符
		
//		byte[] bytes=new byte[] {65,66,67,68,69,70,'G'};//创建一个数组,并将数据存储在数组中
		
//		fos.write(bytes);//一次输出一组字节
		//字节数组 开始下标  长度
//		fos.write(bytes, 1, 3);//输出数组中下标1-3的数组元素
	}

}

在这里插入图片描述
代码示例FileOutputStream+FileInputStream:

package com.lz.t0;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileInputStream {

	public static void main(String[] args) throws IOException {
		FileOutputStream fos =new FileOutputStream("Files\\b.txt");//创建文件b.txt
		//传输多个字符	
			String s="ABCD";
			
			byte[] bs =s.getBytes();
			
			fos.write(bs);
		FileInputStream fis =new FileInputStream("Files\\b.txt");
		  //读到-1就不读了
//		  while(true) {
//			  int n=fis.read();//一次读一个字节
//			  if(n==-1) {
//				  break;
//			  }
//			  System.out.println((char)n);//读字符强转为char
//		  }
		  byte[] bytes =new byte[4];
		  while(true) {
		 int count= fis.read(bytes);//每次读取到的有效字节个数
		  if(count==-1) {
			  break;
		  }
		  //读多少,打印多少
		  for(int i=0;i<count;i++) {
			  System.out.println((char)bytes[i]);
		  }
		  System.out.println();
		  }
	}

}

在这里插入图片描述
示例3:利用io输入输出复制一张图片

package com.lz.t0;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileIO {

	public static void main(String[] args) throws IOException {
		//将指定的图片,上传一份到项目里来
		
		//文件是存储设备中-》读到程序中来-》写入到存储设备中
		
		FileInputStream fis =new FileInputStream("E:\\360MoveData\\Users\\lenovo\\Desktop\\QQ截图20190307080440.png");
		//输出流
		
		FileOutputStream fos =new FileOutputStream("Files\\美女.jpg");
		
//		byte[] cache =new byte[1024*1024];//复制的图片的大小为1m,原图片560k左右,不符合,浪费资源
		int cache=0;//代表每次读到的字节
		while((cache=fis.read())!=-1) {//原来图片有多大,复制多大
			fos.write(cache);//读多少写多少
		}
		//释放资源
		fis.close();
		fos.close();
	}

}

在这里插入图片描述
(3)字节过滤流:
缓冲流:
BufferedOutputStream/BUfferedOutputStream
作用:提高IO效率,减少访问磁盘的次数。提高数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close。
示例:

package com.lz.t1;

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 TestBufferOutputStream {

	public static void main(String[] args) throws IOException {
		//有参构造需要一个字节输出节点流
		//先创键字节输出结点流
		FileOutputStream fos =new FileOutputStream("Files\\buff.txt");
		//增强节点流
		BufferedOutputStream bos =new BufferedOutputStream(fos);
		
		//过滤流的Write方法,是先写入到缓冲区数组里
		bos.write('A');
		bos.write('B');
		bos.write('C');
		bos.write('D');
		
		bos.flush();//刷新缓冲区(将缓冲区的数据,一次性写入到文件中,并清空当前缓冲区)	
		bos.write('E');
		bos.write('F');
		bos.flush();
		bos.close();//关闭输出流,并将缓冲区的数据一次性写入文件中。	
		//-----------------------------
		FileInputStream fis =new FileInputStream("Files\\buff.txt");//读入文件中的内容		
		BufferedInputStream bis =new BufferedInputStream(fis);
		byte[] bytes =new byte[4];//
		while(true) {
			int len=bis.read(bytes);
			if(len==-1) {break;}
			for(int i=0;i<len;i++) {
				System.out.println((char)bytes[i]+"\t");
			}
			System.out.println();
		}		
	}
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值