首页 > 其他分享 >核心(Hutool-core)IO流相关(IO工具类-IoUtil)

核心(Hutool-core)IO流相关(IO工具类-IoUtil)

时间:2024-06-14 11:56:08浏览次数:23  
标签:core 读取 IoUtil 对象 IO 序列化 方法

方法

拷贝

流的读写可以总结为从输入流读取,从输出流写出,这个过程我们定义为拷贝。这是一个基本过程,也是文件、流操作的基础。

以文件流拷贝为例:

BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);
copy方法同样针对Reader、Writer、Channel等对象有一些重载方法,并提供可选的缓存大小。默认的,缓存大小为1024个字节,如果拷贝大文件或流数据较大,可以适当调整这个参数。

针对NIO,提供了copyByNIO方法,以便和BIO有所区别。我查阅过一些资料,使用NIO对文件流的操作有一定的提升,我并没有做具体实验。相关测试请参阅博客:http://www.cnblogs.com/gaopeng527/p/4896783.html(opens new window)

Stream转Reader、Writer

IoUtil.getReader:将InputStream转为BufferedReader用于读取字符流,它是部分readXXX方法的基础。
IoUtil.getWriter:将OutputStream转为OutputStreamWriter用于写入字符流,它是部分writeXXX的基础。
本质上这两个方法只是简单new一个新的Reader或者Writer对象,但是封装为工具方法配合IDE的自动提示可以大大减少查阅次数(例如你对BufferedReader、OutputStreamWriter不熟悉,是不是需要搜索一下相关类?)

读取流中的内容

读取流中的内容总结下来,可以分为read方法和readXXX方法。

read方法有诸多的重载方法,根据参数不同,可以读取不同对象中的内容,这包括:
InputStream
Reader
FileChannel
这三个重载大部分返回String字符串,为字符流读取提供极大便利。

readXXX方法主要针对返回值做一些处理,例如:
readBytes 返回byte数组(读取图片等)
readHex 读取16进制字符串
readObj 读取序列化对象(反序列化)
readLines 按行读取
toStream方法则是将某些对象转换为流对象,便于在某些情况下操作:
String 转换为ByteArrayInputStream
File 转换为FileInputStream

写入到流

IoUtil.write方法有两个重载方法,一个直接调用OutputStream.write方法,另一个用于将对象转换为字符串(调用toString方法),然后写入到流中。
IoUtil.writeObjects 用于将可序列化对象序列化后写入到流中。
write方法并没有提供writeXXX,需要自己转换为String或byte[]。

关闭

对于IO操作来说,使用频率最高(也是最容易被遗忘)的就是close操作,好在Java规范使用了优雅的Closeable接口,这样我们只需简单封装调用此接口的方法即可。

关闭操作会面临两个问题:

被关闭对象为空
对象关闭失败(或对象已关闭)
IoUtil.close方法很好的解决了这两个问题。

在JDK1.7中,提供了AutoCloseable接口,在IoUtil中同样提供相应的重载方法,在使用中并不会感觉到有哪些不同。

标签:core,读取,IoUtil,对象,IO,序列化,方法
From: https://www.cnblogs.com/velloLei/p/18247553

相关文章

  • 核心(Hutool-core)IO流相关
    由来IO的操作包括读和写,应用场景包括网络操作和文件操作。IO操作在Java中是一个较为复杂的过程,我们在面对不同的场景时,要选择不同的InputStream和OutputStream实现来完成这些操作。而如果想读写字符流,还需要Reader和Writer的各种实现类。这些繁杂的实现类,一方面给我们提供了更多......
  • BEV感知算法---BevFusion
    前言转载自https://blog.csdn.net/qq_40672115/article/details/134891133这是一篇LiDAR和Camera融合的BEV感知算法,从算法动机&开创性思路、主体结构、损失函数以及性能对比四个方面展开。BEVFusion有两篇文章,本次课程主要讲解的是阿里和北大的:https://arxiv.org/pdf/2205.1......
  • 核心(Hutool-core)日期时间
    日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象如下:日期时间工具DateUtil针对日期时间操作提供一系列静态方法DateTime提供类似于Joda-Time中日期时间对象的封装,继承自Date类,并提供更加丰富的对象方法。FastDateFormat提供线程安全的针对Da......
  • 实用软件下载:Studio One最新安装包及详细安装教程
    StudioOne6是一款功能丰富、专业级的音乐制作软件,它具备灵活的工作流程和高效的团队协作能力,能帮助用户实现高质量的音乐创作和制作。智能模板更快的启动,全新的智能模板为你手头的任务提供了必要的工具集,包括基本录制、混音词干、母带制作专辑和设置现场表演等,一键播放乐器......
  • 核心(Hutool-core)类型转换
    在Java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从HttpRequest获取的Parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成String,然后调用XXX.parseXXX方法,还要承受转换失败的风险,不得不加一层trycatch,这个小小的过程混迹在业......
  • 04《android studio开发实战(第三版)》第七到十章阅读笔记
    第七章:持久化存储本章介绍了SharedPreferences的使用方法,它是一种轻量级的存储方案,用于保存简单的键值对数据,如用户设置和配置。 学习了如何创建SharedPreferences对象,使用getSharedPreferences()方法读取和写入数据,以及如何使用apply()和commit()提交修改。了解了如何在Andro......
  • Java IO流(二进制IO流、文本IO流)
    JavaIO流(Input/OutputStream)是Java中用于处理输入输出操作的一种机制。IO流可以从不同的数据源读取数据,或者将数据写入到不同的目标。根据处理的数据类型,IO流可以分为二进制IO流和文本IO流。一、二进制IO流: 二进制IO流主要用于处理非文本数据,如图片、音频、视频等。在J......
  • 【Python&RS】基于Rasterio库裁剪栅格数据&压缩栅格影像
    ​     之前分享过【Python&RS】Rasterio库安装+基础函数使用教程,大家有兴趣的可以去看看。由于最近有涉及到栅格裁剪和压缩的问题,所以研究了一下今天和大家分享分享。原创作者:RS迷途小书童博客地址:https://blog.csdn.net/m0_56729804?type=blog1需要的库imp......
  • 【开源样本库分享】Five-Billion-Pixels-ENVIFormat 五十亿像素高精度样本库分享
    很高兴给大家分享一个好消息,Five-Billion-Pixels-ENVIFormat五十亿像素开源样本库(ENVI格式)正式上线了!Five-Billion-Pixels样本库是一个为遥感、地理信息系统(GIS)和图像处理领域的研究和应用而精心打造的高质量样本库。为了让更多的人受益,我们决定制作并发布ENVI格式的五十亿像素......
  • cc2/4链:针对commons-collections4的攻击
    cc2/4是干嘛的cc2、cc4针对的commons-collections4版本大于4.0(含)入口略有不同,后续和cc3一样通过TemplatesImpl加载恶意字节码调用链PriorityQueue.readobjectPriorityQueue的反序列化方法调用了heapify()heapifyheapify()调用了siftDown可以看见元素需要大于两个,所以我们......