Java学习笔记之IO(二):InputStream输入字节流

package com.io;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
 
import org.junit.Test;
 
/*
File类:用于描述一个文件或者文件夹的;
通过File对象我们可以读取文件或者文件夹的属性;如果需要读取文件的内容数据,则需要使用IO流技术;
IO流:input   output
IO流解决问题:解决设备与设备之间的数据传输问题。	内存-->硬盘	硬盘-->内存
IO流分类:
	按照数据的流向划分:
	输入流:
	输出流:
		判断使用输入流还是输出流的依据:
		以当前程序作为参照物,观察数据是流入还是流出;如果数据流出则使用输出流(output);如果数据流入则使用输入流(input);
	
	按照处理的单位来划分:
	字节流:字节流读出的都是文件中的二进制数据,读取到的二进制数据不会经过任何的处理;
	字符流:字符流也是读取文件中的二进制数据,不过会把这些二进制数据转换成我们能认识的字符;
	
	
输入字节流:	
--------| InputStream:所有输入字节流的基类;抽象类;
-----------| FileInputStream:读取文件数据的输入字节流;
	使用FileInputStream读取文件数据的步骤:
	1、找到目标文件(用File类表示);
	2、建立数据的输入通道(创建输入字节流对象);
	3、读取文件中的数据;
	4、关闭输入流,释放资源;
	
	问题:读取完文件中的数据之后,不关闭资源有什么影响?
		如果不关闭资源,其他程序无法对该资源文件进行操作;
 */
 
public class Demo3 {
 
	// 使用read()方法直接读取数据
	@Test
	public void test1() throws IOException{
		// 1、找到目标文件:用File类表示;
		File file = new File("D:\\a.txt");
		// 2、建立数据的输入通道:创建FileInputStream输入流对象
		FileInputStream fileInputStream = new FileInputStream(file);
		// 声明一个变量,用于存储读取到的内容;
		int content = 0;
		// 3、读取文件中的数据;read():读取一个字节的数据;返回读取到的内容;
		while ((content = fileInputStream.read()) != -1){   // 读取到文件末尾返回-1
			// 直接读取到的是字节数据,需要转换成字符数据;
			// 回车(\r)读取到的是13;  换行(\n)读取到的是10;  空格(" ")读取到的是32;
			// 此处转换只能转换字符数据;中文数据在此处转换成的是乱码;
			char c = (char)content;	
			System.out.println("读取的数据为:" + content + "-" + c);
		}
		// 关闭输入流,释放资源;
		fileInputStream.close();
	}
	
	// 使用缓冲数组 byte[] 读取数据;效率要比使用read()方法直接读取数据高很多;
	@Test
	public void test2() throws IOException{
		// 1、找到目标文件
		File file = new File("D:\\a.txt");
		// 2、建立数据的输入通道
		FileInputStream in = new FileInputStream(file);
		int len = 0;
		// 建立缓冲字节数组,存储读取到的数据;字节数组的长度一般为1024的倍数,与计算机的处理单位有关;
		// 理论上缓冲数组越大,效率越高;
		byte[] buf = new byte[1024];
		// 将数据读取到缓冲字节数组中,返回读取数据的字节长度;
		while ((len = in.read(buf)) != -1){
			System.out.println("读取数据的字节长度:" + len);
			// 将读取到的数据转换成字符串;
			String content = new String(buf, 0, len);
			System.out.println("读取到的数据:" + content);				
		}
		// 关闭流,释放资源
		in.close();
	}
	
}

 

上一篇:网络编程


下一篇:Java:InputStream、OutputStream(一)——概述