java-io流-字节流与字符流

字节流

先上图片:
InputStream
在这里插入图片描述
然后常用FileInputStream来实例化对象
在这里插入图片描述
看看这个字节输入流的体系
在这里插入图片描述
OutputStream(和InputStream一样,就是input换成Output)
在这里插入图片描述

用字节流实现一段文字复制粘贴到文件中


import java.io.File;
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 {
    
    
		//创建源字符串以及接收的文件,参数位路径
		String info = "hello";
		File fileDest = new File("D:\\dest.txt");
		//创建输出流,参数为文件也可以是文件的路径直接用字符串表示。
		
		FileOutputStream fos = new FileOutputStream(fileDest);
		//获取当前时间
		long start = System.currentTimeMillis();
		
		byte [] b = info.getBytes(); //用字节的方式保存源字符串,,因为下面要用write(byte [] b)
		for( int i = 0; i < info.length(); i++ ) {
    
    
			fos.write(b[i]); //一次读一个字节
		}
		
		//获取当前时间
		long end = System.currentTimeMillis();
		//输出看看
		System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

用字节流来完成文件的复制粘贴

方法一


import java.io.File;
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 {
    
     //方法一这个是将所有异常抛出
		//创建源文件以及接收的文件,参数位路径
		File fileSrc = new File("D:\\src.txt");
		File fileDest = new File("D:\\dest.txt");
		//创建输入输出流,参数为文件也可以是文件的路径直接用字符串表示。
		FileInputStream fis = new FileInputStream(fileSrc); //先抛出异常
		FileOutputStream fos = new FileOutputStream(fileDest);
		//获取当前时间
		long start = System.currentTimeMillis();
		//输入流用read方法,读取一个字节到n里面,当n为-1时就读到了末尾
		int n = fis.read();
		while(n != -1) {
    
    
			//输出流用write方法来写入文件
			fos.write(n);
			//读一个字节
			n = fis.read();
		}
		//获取当前时间
		long end = System.currentTimeMillis();
		//输出看看
		System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

方法二

import java.io.File;
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 {
    
    
		//创建源文件以及接收的文件,参数位路径
		File fileSrc = new File("D:\\src.txt");
		File fileDest = new File("D:\\dest.txt");
		//创建输入输出流,参数为文件也可以是文件的路径直接用字符串表示。
		FileInputStream fis = new FileInputStream(fileSrc); //先抛出异常
		FileOutputStream fos = new FileOutputStream(fileDest);
		//获取当前时间
		long start = System.currentTimeMillis();
		//输入流用read方法,每次读取1024字节到byte数组里面,当n为-1时就读到了末尾
		byte [] b = new byte [1024];
		int n = fis.read(b);
		while(n != -1) {
    
    
			//输出流用write方法来写入文件
			fos.write(b);
			//读一个字节
			n = fis.read(b);
		}
		//获取当前时间
		long end = System.currentTimeMillis();
		//输出看看
		System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

方法三


import java.io.File;
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 {
    
    
		//创建源文件以及接收的文件,参数位路径
		File fileSrc = new File("D:\\src.txt");
		File fileDest = new File("D:\\dest.txt");
		//创建输出流,参数为文件也可以是文件的路径直接用字符串表示。
		FileInputStream fis = new FileInputStream(fileSrc);
		FileOutputStream fos = new FileOutputStream(fileDest);
		//获取当前时间
		long start = System.currentTimeMillis();
		byte [] b = new byte [1024]; //每次读1024个字节,速度更快
		int n = fis.read(b);
		while( n != -1) {
    
    
			fos.write(b, 0, b.length); //三个参数分别是写入数组名,写的起始偏移量,0也就是从第一个下标开始读,第三个参数读到哪里终止
			n = fis.read(b);
		}
		//获取当前时间
		long end = System.currentTimeMillis();
		//输出看看
		System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

字符流

Reader和Writer这两个是java中最基本的字符输入输出流。
看下原码
在这里插入图片描述
Reader的结构,常用FileReader这个子类来实例化对象。
在这里插入图片描述
Writer和Reader类似,直接上结构。
在这里插入图片描述

用基本字节流来实现文本的复制粘贴

错误示例如下

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestReader {
    
    

	public static void main(String[] args) throws IOException {
    
    
		//创建源文件以及接收的文件,参数位路径
				File fileSrc = new File("D:\\src.txt");
						
				File fileDest = new File("D:\\dest.txt");
				//创建输出流,参数为文件也可以是文件的路径直接用字符串表示。
				FileReader reader = new FileReader(fileSrc);
				FileWriter writer = new FileWriter(fileDest);
				//获取当前时间
				long start = System.currentTimeMillis();
				char [] b = new char [1024];
				int n = reader.read(b);
				while( n != -1) {
    
    
					writer.write(b, 0, b.length);
					n = reader.read(b);
				}
				//获取当前时间
				long end = System.currentTimeMillis();
				//输出看看
				System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

在这里插入图片描述
方法1

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class TestReader {
    
    

	public static void main(String[] args) throws IOException {
    
    
		//创建源文件以及接收的文件,参数位路径
				File fileSrc = new File("D:\\src.txt");
						
				File fileDest = new File("D:\\dest.txt");
				//创建输出流,参数为文件也可以是文件的路径直接用字符串表示。
				FileReader reader = new FileReader(fileSrc);
				FileWriter writer = new FileWriter(fileDest);
				//获取当前时间
				long start = System.currentTimeMillis();
				char [] b = new char [1024];
				int n = reader.read(b);
				while( n != -1) {
    
    
					writer.write(b, 0, b.length);
					writer.flush(); //输出流要手动刷新,不然写不进去的。
					n = reader.read(b);
				}
				
				//获取当前时间
				long end = System.currentTimeMillis();
				//输出看看
				System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
	}

}

在这里插入图片描述
方法2

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestReader {
    
    
	public static void main(String[] args) throws IOException {
    
    
		//创建源文件以及接收的文件,参数位路径
				File fileSrc = new File("D:\\src.txt");
				File fileDest = new File("D:\\dest.txt");
				//创建输出流,参数为文件也可以是文件的路径直接用字符串表示。
				FileReader reader = new FileReader(fileSrc);
				FileWriter writer = new FileWriter(fileDest);
				//获取当前时间
				long start = System.currentTimeMillis();
				char [] b = new char [1024];
				int n = reader.read(b);
				while( n != -1) {
    
    
					writer.write(b, 0, b.length);
					writer.flush(); //输出流要手动刷新,不然写不进去的。
					n = reader.read(b);
				}
				//获取当前时间
				long end = System.currentTimeMillis();
				//输出看看
				System.out.println("一起用时:" + (end - start) +"毫秒,已完成。");
				
				writer.close();
				reader.close();
	}
	

}

在这里插入图片描述

字节流和字符流的不同点以及相同点

相同点

  • 都是底层的流,十分重要,包装流(也叫处理流依赖于底层流)。

不同点

  • 字节流可以处理二进制文件,像音乐,图片,视频等文件,而字符流有局限只能处理文本。
  • 同等条件下,字节流速度比字符流慢。

所以是传输文本,就首选字符流。其他情况只用字节流

猜你喜欢

转载自blog.csdn.net/toomemetoo/article/details/112800406