2024年浅谈Java IO流(1),为什么有人说Java开发不再吃香

最后

小编精心为大家准备了一手资料

以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术

【附】架构书籍

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

BATJ面试要点及Java架构师进阶资料

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在操作上,字节流本身不会用到缓存区,是文件本身直接操作的,而字符流使用了缓存区,通过缓存区再操作文件。

例:

  • 使用字节流不关闭执行

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class OutputStreamDemo {

@SuppressWarnings(“resource”)

public static void main(String[] args) throws IOException {

//第1步:使用File类找到一个文件

File f = new File(“d:” + File.separator + “a.txt”);

// 第2步:通过子类实例化父类对象

OutputStream out = null;

// 准备好一个输出的对象

out = new FileOutputStream(f);

// 通过对象多态性进行实例化

// 第3步:进行写操作

String str = “Hello World!!!”;

// 准备一个字符串

byte b[] = str.getBytes();

// 字符串转byte数组

out.write(b);

// 将内容输出

// 第4步:关闭输出流

// out.close();

// 此时没有关闭

}

}

运行结果:

在这里插入图片描述

分析:此时没有关闭字节流输出操作,而文件中有输出内容,证明字节流是直接操作文件本身。

  • 使用字符流不关闭

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class WriterDemo {

@SuppressWarnings(“resource”)

public static void main(String[] args) throws IOException {

//第1步:使用File类找到一个文件

File f = new File(“d:” + File.separator + “a.txt”);

// 第2步:通过子类实例化父类对象

OutputStream out = null;

// 准备好一个输出的对象

out = new FileOutputStream(f);

// 通过对象多态性进行实例化

// 第3步:进行写操作

String str = “Hello World!!!”;

// 准备一个字符串

byte b[] = str.getBytes();

// 字符串转byte数组

out.write(b);

// 将内容输出

// 第4步:关闭输出流

// out.close();

// 此时没有关闭

}

}

结果:

在这里插入图片描述

  • 关闭输出流并强制清空缓存区后

// 强制性清空缓冲区中的内容

out.flush();

// 将内容输出

// 第4步:关闭输出流

out.close();

结果:

在这里插入图片描述

分析:程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。

字节流与字符流主要的区别是他们的的处理方式:

  • 字节流主要用在处理二进制数据,它是按字节来处理的。
  • 字符流是按虚拟机的Encode来处理,也就是要进行字符集的转化。
  • 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。
  • 从字节流转化为字符流时,实际上就是byte[]转化为String,反之String转化为byte[]

4、java输入/输出流体系中常用的流的分类表

注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。

5、用法

  • 使用FileInputStream类读取文件内容

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

/**

  • 数据输入流测试

*/

public class firstIO {

public static void main(String [] args) throws IOException{

int i=0;

FileInputStream in=null;

try {

in=new FileInputStream(“D:\a.txt”);//从文件外读数据

} catch (FileNotFoundException e) {

// TODO: handle exception

System.out.println(“找不到文件位置”);

System.exit(-1);

}

try {

int num=0;//用于字节个数的计数

while((i=in.read())!=-1){

System.out.println((char)i);//将得到的ASCII码值转换成字符型

num++;

}

in.close();

System.out.println(“传输字节个数:”+num);

} catch (Exception e) {

// TODO: handle exception

System.out.println(“读取文件错误”);

}

}

}

  • 使用FileOutputStream写入文件

import java.io.FileInputStream;

import java.io.FileOutputStream;

/**

  • 输入输出流测试

*/

public class outIO {

public static void main(String []args){

int i=0;

FileInputStream in=null;

FileOutputStream out=null;

try {

//实例化FileInputStream,FileOutputStream对象

in=new FileInputStream(“D:\a.txt”);

out=new FileOutputStream(“D:\b.txt”);

while((i=in.read())!=-1){

out.write(i);

System.out.println((char)i);

}

in.close();

out.close();

System.out.println(“文件已复制”);

} catch (Exception e) {

// TODO: handle exception

System.out.println(“文件复制错误”);

System.exit(-1);

}

}

}

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
[外链图片转存中…(img-sIA45Puy-1715263658321)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值