Java中的IO流之输入流|乐字节

亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了。上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流。

点击回顾上一篇:乐字节Java之file、IO流基础知识和操作步骤

一、 输入流

字节流和字符流的操作方式几乎完全一样,只是操作的数据单元不同而已 。字节流可

以操作所有文件,字符流仅操作纯文本。

1、抽象类:InputStream 和 Reader

InputStream和Reader是所有输入流的基类,它们是两个抽象类,是所有输入流的模版,其中定义的方法在所有输入流中都可以使用。

在InputStream里包含如下三个方法:

在Reader中包含如下三个方法:

对比InputStream和Reader 所提供的方法,可以看出这两个基类的功能基本相似。返回结果为-1 时表明到了输入流的结束点。 InputStream 和 Reade 都是抽象的,不能直接创建它们的实例,可以使用它们的子类。

2、文件节点类: FileInputStream 和 FileReader

FileInputStream 和 FileReader,它们都是节点流,直接和指定文件关联。 操作方式

基本一致。

1)、单个字节读取

以FileInputStream为例:

public class SingleFileRead {
	public static void main(String[] args) {
		// 1、建立联系 File对象
		File file = new File("f:/IO/test.txt");
		// 2、选择流
		InputStream in = null;// 提升作用域
		try {
			in = new FileInputStream(file);
			// 3、操作 单个字节读取
		long fileLength = file.length(); // 接收实际读取的字节数
			// 计数器
			System.out.println(fileLength);
			long num = 0;
			// 循环读取
			while (num < fileLength) {
				char ch = (char) in.read();
				System.out.println(ch);
				num++;
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("文件不存在,不能进行下一步操作");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("读取文件失败");
		} finally {
			try {
				// 4、释放资料
				if (in != null) {
					in.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("关闭文件输入流失败");
			}
		}
	}
}

乐字节原创

2)、批量读取(字节|字符重点)

public class ReadFile {
	public static void main(String[] args) {
		//1、字节读取:建立联系    File对象
		File file=new File("f:/IO/test.txt");
		//2、选择流
		InputStream in=null;//提升作用域
		try {
			in=new FileInputStream(file);
			//3、操作   不断读取   缓冲数组
			byte[]car=new byte[1024];
			int len=0;	//接收实际读取的大小
			//循环读取
			while(-1!=(len=in.read(car))){
				//输出,字节数组转成字符串
				String info=new String(car,0,len);
				System.out.println(info);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("文件不存在");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("读取文件失败");
		}finally{
			try {
				//4、释放资料
				if(in!=null){
					in.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("关闭文件输入流失败");
			}
		}
	}
}
//字符读取1、创建源
		File src=new File("f:/char.txt");
		//2、选择流
		Reader reader=new FileReader(src);
             //3、读取操作
		char[] flush=new char[1024];
		int len=0;
		while(-1!=(len=reader.read(flush))){
			//字符数组转换为字符串
			String str=new String(flush,0,len);
			System.out.println(str);
		}
//4、释放资源
	      reader.close();
乐字节原创

3、缓冲处理类:BufferedInputStream和 BufferedReader(重点)

缓冲提高性能: 字节流直接套上即可;字符缓冲流 +新增方法(不能使用多态)

//1、创建源,建立联系
File src =new File("test.txt");
//2、选择缓冲流
    InputStream is =new BufferedInputStream(new FileInputStream(src));   //3、操作  :  多个读取
    byte[] car =new byte[2];
    int len =0;
while(-1!=(len=is.read(car))){
//获取数组的内容   字节数组转字符串  new String(字节数组,0,length)
      System.out.println(new String(car,0,len));
    }
    //4、释放资源
    is.close();
//创建源:
    File src =new File("test.txt");
//使用字符缓冲流  提高性能读取文件  +新增方法(不能使用多态)
    BufferedReader br =new BufferedReader(new FileReader(src));
//操作  行读取
String line=null;
while(null!=(line=br.readLine())){
        System.out.println(line);
}
//释放资源
br.close();

4、转换处理流: InputStreamReader

转换流:将字节流转为字符流 处理乱码(编码集、解码集)。

//读取文件
    File src =new File("test.txt");
//转换流
    BufferedReader br =new BufferedReader(
          new InputStreamReader(
                new BufferedInputStream(
                      new FileInputStream(
                            src
                          )             

                    ),"utf-8"
              )
        );
//行读取
    String msg =null;
    while(null!=(msg =br.readLine())){
      System.out.println(msg);
    }
    br.close();

5、字节数组节点类: ByteArrayInputStream

操作的节点为字节数组,数组在jvm 内存中,由垃圾回收机制管理,不需要手动关闭

//1、创建源
    byte[] src ="io 学习入门".getBytes();
//2、选择流
InputStream is = new ByteArrayInputStream(src);
//3、操作 与文件一致
  byte[] flush =new byte[10];
  int len =0;
  while(-1!=(len =is.read(flush))){
    System.out.println(new String(flush,0,len));
  }
//4、释放
  is.close();

6、数据处理流:DataInputStream

可以处理基本类型+String,保留数据的类型。前提是读取顺序与写出顺序一致,否则读取数据不正确

/**
	 * 数据+类型	输出到文件
	 * @param destPath
	 * @throws IOException
	 */
	public static void write(String destPath) throws IOException{
		int point=2;
		long num=100L;
		String str="数据类型";
		//创建源
		File dest=new File(destPath);
		//选择流
		DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));
		//操作	写出的顺序 		为读取作准备
		dos.writeInt(point);
		dos.writeLong(num);
		dos.writeUTF(str);
		dos.flush();
		//释放资源
		dos.close();
	}

7、对象处理流(反序列化):ObjectInputStream

/**
	 * 反序列化:
	 * 1、先写入再读取
	 * 2、读取对象需要知道具体类型,依次读取
	 * 注意:
	 * 1)不是所有的对象都可以序列化	Serializable
	 * 2)不是所有的属性都需要序列化	transient
	 */
public static void read(String srcPath) throws FileNotFoundException, IOException, ClassNotFoundException{
		//创建源
		File src=new File(srcPath);
		//选择流	OjbectInputStream
		ObjectInputStream dis=new ObjectInputStream(
				new BufferedInputStream(
						new FileInputStream(src)
						)
				);
		//操作	读取的顺序与写出的顺序一致		必须存在才能读取
		Object obj=dis.readObject();
		if(obj instanceof Employee){
			Employee emp=(Employee)obj;
			System.out.println(emp.getName());
			System.out.println(emp.getSalary());
		}
		obj=dis.readObject();
		int[]arr=(int[])obj;
		System.out.println(Arrays.toString(arr));
		//释放资源
		dis.close();
	}

Java中的IO流-输入流就介绍到这里了,下次再说输出流。

乐字节原创,更多Java技术干货持续更新,欢迎关注。

原文地址:https://www.cnblogs.com/lotbyte/p/11278115.html

时间: 2024-12-29 08:01:12

Java中的IO流之输入流|乐字节的相关文章

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

JAVA 中的IO流

Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的,字节流可以操作任意数据) 字符流:Reader,Writer.(字符流只能操作字符,但是在实际应用中字符流比较方便) 从操作来看又可以分为:输入流和输出流. 在进行IO流操作的时候分为以下几步:1.导入IO流的包,2.进行IO流的异常处理,3.关闭IO流释放资源. 字节流 ————————————

Java中的IO流(五)

上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式.并且此注永远不会抛出IOException. 此流的构造函数大致分三类 1,接收File文件类型的 2,接收OutputStream类型的 3,接收文件名形式的 下演示一下此流的两个方法 1 private static void functio

整理 JAVA中的IO流 (字符流和字节流两个大类)

java中的io流分为两类,字符和字节: OutputStream和InputStream字节流的父类,抽象.OutputStream有两个提供了实现的接口closable和flushable. Writer和Reader字符流的父类,抽象.实际上在流的操作中,底层与文件进行读写的都是字节流,因为即使是字符流的对象,其最终实现读写的也是用的字节流. 操作文件的字节子类FileOutputStream和FileInputStream.记住,这里面写出和读入的都是字节. class useByteS

Java中的IO流总结

Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream.以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter. 3. 转换流InputStreamReader和OutputStreamWriter 一:流的继承关系 字节

Java中的IO流体系

Java为我们提供了多种多样的IO流,我们可以根据不同的功能及性能要求挑选合适的IO流,如图10-7所示,为Java中IO流类的体系. 注:这里只列出常用的类,详情可以参考JDK API文档.粗体标注为常用! 图10-7 Java中的IO流体系 从上图发现,很多流都是成对出现的,比如:FileInputStream/FileOutputStream,显然是对文件做输入和输出操作的.我们下面简单做个总结: 1. InputStream/OutputStream 字节流的抽象类. 2. Reader

Java中的IO流系统详解

Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换.而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换.字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高

技术文章-java中的IO流

1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: 判断是否存在:f.exists() 获取文件名:f.getName() 获取其绝对路径:f.getAbsolutePath() 但是如果涉及文件的查看与存储,就要利用IO的输入和输出流进行操作. 2.输入流: 常用的有InputStream类. 对于txt类文件查看的操作如下: // 创建输入流 I

Java中常用IO流之文件流的基本使用姿势

所谓的 IO 即 Input(输入)/Output(输出) ,当软件与外部资源(例如:网络,数据库,磁盘文件)交互的时候,就会用到 IO 操作.而在IO操作中,最常用的一种方式就是流,也被称为IO流.IO操作比较复杂,涉及到的系统调用比较多,相对操作内存而言性能很低.然而值得兴奋的是,Java提供了很多实现类以满足不同的使用场景,这样的实现类有很多,我只挑选些在日常编码中经常用到的类进行说明,本节主要介绍和文件操作相关的流,下面一起来瞧瞧吧. File File是Java在整个文件IO体系中比较