Java知识总结-IO字节流


说明:通过流操作原理根据源和目的分析面对问题时需要用哪种流对象


一,字节流

InputStream:字节输入流

字节输入流常见共性方法:

read():从输入流中读取一个字节;

read(byte[] b):从输入流读取一定数量的字节,并将其存储在缓冲区数组b中;

read(byte[] b,int off,int len):将输入流中最多len个数据字节读入byte数组;

OutputStream:字节输出流

字节输出流常见共性方法:

write(int b):将指定的字节写入输入流;

write(byte[] b):将字节数组b中所有字节写入输出流

write(byte[] b,int off,int len):将指定字节数组中从off开始指定的len个元原写入输出流。

二,FileInputStream和FileOutputStream

示例1:

通过FileInputStream读取文件并打印

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//建立流
		FileInputStream fis=new FileInputStream("123.txt");
		int num=0;
		//读取并打印
		while((num=fis.read())!=-1){
			System.out.println(num);
		}
		//关闭流
		fis.close();
	}
}

示例2:

通过FileOutputStream向文件写入数据。

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//建立流
		FileOutputStream fos=new FileOutputStream("333.txt");
		String str="FileOutputStream";
		//写入数据
		fos.write(str.getBytes());
		//关闭流
		fos.close();
	}
}


示例3:

通过FileInputStream和FileOutputStream复制一个文件。

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//建立流
		FileInputStream fis=new FileInputStream("321.jpg");
		FileOutputStream fos=new FileOutputStream("333.jpg");
		int num=0;
		//复制文件
		while((num=fis.read())!=-1){
			fos.write(num);
		}
		//关闭流
		fis.close();
		fos.close();
	}
}


三,字节流缓冲区

BufferedOutputStream:字节输出路缓冲区

BufferedInputStream:字节输入流缓冲区

示例:使用缓冲区复制文件:

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//建立流
				BufferedInputStream bis
					=new BufferedInputStream(new FileInputStream("111.txt"));
				BufferedOutputStream bos
					=new BufferedOutputStream(new FileOutputStream("222.txt"));
				int num;
				//复制文件
				while((num=bis.read())!=-1){
					bos.write(num);
				}
				//关闭流
				bis.close();
				bos.close();

	}
}


四,自定义一个字节输入流缓冲区

//自定义字节符输入流缓冲区
class MybufferedInputStream{
	private InputStream is;
	byte[] buf=new byte[1024];
	int len;
	int num;
	//构造函数,传入InputStream对象作为参数
	MybufferedInputStream(InputStream is){
		this.is=is;
	}
	//自定义read方法
	public int myRead() throws IOException{
		if(len==0){
			//当数组为空时,从IuputStream流中读取数据到数组
			len=is.read(buf);
			if(len<0)
				return -1;
			num=0;
			byte b=buf[num];
			num++;
			len--;
			return b&255;
		}
			
		else if(len>0){
			byte b=buf[num];
			num++;
			len--;
			return b&255;
		}
		return -1;
			
	}
	//自定义close方法
	public void myclose() throws IOException{
		is.close();
	}
}

运用自定义的缓冲区复制文件

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//建立流
		MybufferedInputStream bis
			=new MybufferedInputStream(new FileInputStream("111.txt"));
		BufferedOutputStream bos
			=new BufferedOutputStream(new FileOutputStream("222.txt"));
		int num;
		//复制文件
		while((num=bis.myRead())!=-1){
			bos.write(num);
		}
		//关闭流
		bis.myclose();
		bos.close();
		
	}
}

五,标准输入流和标准输出流

System.in:标准输入流;

System.out:标准输出流;

示例:使用标准输入流读取键盘输入并用标准输出流打印:

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//标准输入路
		InputStream in=System.in;
		//标准输出流
		OutputStream out=System.out;
		StringBuilder sb=new StringBuilder();
		while(true){
			//输入流读取键盘录入
			int num=in.read();
			if(num=='\r')
				continue;
			if(num=='\n'){
				String str=sb.toString();
				if("over".equals(str))
					break;
				//输出流打印
				out.write(str.getBytes());
				System.out.println();
				sb.delete(0,sb.length());
			}
			else	 
				sb.append((char)num);
		}
		in.close();
		out.close();
	}
}

六,转换流

OutputStreamWriter :字符流通向字节流的桥梁;

构造函数:

OutputStreamWriter(OutputStream out)

InputStreamReader :字节流通向字符流的桥梁;

构造函数:

InputStreamReader(InputStream in)

示例:

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException{
		//OutputStream os=System.out;
		//OutputStreamWriter osw=new OutputStreamWriter(os);
		//BufferedWriter bufw=new BufferedWriter(osw);
		//InputStream is=System.in;
		//InputStreamReader isr=new InputStreamReader(is);
		//BufferedReader bufr=new BufferedReader(isr);
		BufferedReader bufr = 
				new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bufw = 
				new BufferedWriter(new OutputStreamWriter(System.out));
		String line=null;
		while((line=bufr.readLine())!=null){
			if("over".equals(line))
				break;
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		bufr.close();
		bufw.close();
	}
}


七,操作流的基本规律

流操作的基本规律:

通过三个明确来完成。

1,明确源和目的。
 源:输入流。InputStream  Reader
 目的:输出流。OutputStream  Writer。
2,操作的数据是否是纯文本。
 是:字符流。
 不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
 通过设备来进行区分:
 源设备:内存,硬盘。键盘
 目的设备:内存,硬盘,控制台。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值