首页 > 其他分享 >day19

day19

时间:2023-03-18 16:12:08浏览次数:42  
标签:字符 字节 输出 void public day19 String

day19

释放资源的方式

close()

try-catch-finally

finally代码区的特点:无论try中的程序是正常执行了,还是出现了异常,最后都一定会执行finally区,除非JVM终止。

作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)。

try-with-resource

try(定义资源1;定义资源2;…){
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}

该资源使用完毕后,会自动调用其close()方法,完成对资源的释放!

  • () 中只能放置资源,否则报错
  • 资源一般指的是最终实现了AutoCloseable接口。

IO流——字符流

FileReader(文件字符输入流)

作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。

构造器 说明
public FileReader(File file) 创建字符输入流管道与源文件接通
public FileReader(String pathname) 创建字符输入流管道与源文件接通
方法名称 说明
public int read() 每次读取一个字符返回,如果发现没有数据可读会返回-1.
public int read(char[] buffer) 每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1.

FileWriter(文件字符输出流)

l作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。

构造器 说明
public FileWriter(File file) 创建字节输出流管道与源文件对象接通
public FileWriter(String filepath) 创建字节输出流管道与源文件路径接通
public FileWriter(File file,boolean append) 创建字节输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath,boolean append) 创建字节输出流管道与源文件路径接通,可追加数据
方法名称 说明
void write(int c) 写一个字符
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分
void write(char[] cbuf) 写入一个字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的一部分

字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效

方法名称 说明
public void flush() throws IOException 刷新流,就是将内存中缓存的数据立即写到文件中去生效!
public void close() throws IOException 关闭流的操作,包含了刷新!

字节流适合做一切文件数据的拷贝(音视频,文本);字节流不适合读取中文内容输出

字符流适合做文本文件的操作(读,写)。

字节缓冲流的作用

原理:字节缓冲输入流自带了8KB缓冲池;字节缓冲输出流也自带了8KB缓冲池。

构造器 说明
public BufferedInputStream(InputStream is) 把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能
public BufferedOutputStream(OutputStream os) 把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

BufferedReader(字符缓冲输入流)

作用:自带8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能

构造器 说明
public BufferedReader(Reader r) 把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能

字符缓冲输入流新增的功能:按照行读取字符

方法 说明
public String readLine() 读取一行数据返回,如果没有数据可读了,会返回null

BufferedWriter(字符缓冲输出流)

作用:自带8K的字符缓冲池,可以提高字符输出流写字符数据的性能。

构造器 说明
public BufferedWriter(Writer r) 把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能

字符缓冲输出流新增的功能:换行

方法 说明
public void newLine() 换行 (可兼容各个系统)

IO流-转换流

不同编码读取出现乱码的问题

如果代码编码和被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码!

如果代码编码和被读取的文本文件的编码是不一致的,使用字符流读取文本文件时就会出现乱码!

InputStreamReader(字符输入转换流)

解决不同编码时,字符流读取文本内容乱码的问题。
解决思路:先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了。

构造器 说明
public InputStreamReader(InputStream is) 把原始的字节输入流,按照代码默认编码转成字符输入流(与直接用FileReader的效果一样)
public InputStreamReader(InputStream is ,String charset) 把原始的字节输入流,按照指定字符集编码转成字符输入流(重点)

OutputStreamWriter字符输出转换流

作用:可以控制写出去的字符使用什么字符集编码。
解决思路:获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了。

构造器 说明
public OutputStreamWriter(OutputStream os) 可以把原始的字节输出流,按照代码默认编码转换成字符输出流。
public OutputStreamWriter(OutputStream os,String charset) 可以把原始的字节输出流,按照指定编码转换成字符输出流(重点)

IO流-打印流

PrintStream/PrintWriter(打印流)

作用:打印流可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去。

PrintStream提供的打印数据的方案

构造器 说明
public PrintStream(OutputStream/File/String) 打印流直接通向字节输出流/文件/文件路径
public PrintStream(String fileName, Charset charset) 可以指定写出去的字符编码
public PrintStream(OutputStream out, boolean autoFlush) 可以指定实现自动刷新
public PrintStream(OutputStream out, boolean autoFlush, String encoding) 可以指定实现自动刷新,并可指定字符的编码
方法 说明
public void println(Xxx xx) 打印任意类型的数据出去
public void write(int/byte[]/byte[]一部分) 可以支持写字节数据出去

PrintWriter提供的打印数据的方案

构造器 说明
public PrinWriter(OutputStream/Writer/File/String) 打印流直接通向字节输出流/文件/文件路径
public PrintWriter(String fileName, Charset charset) 可以指定写出去的字符编码
public PrintWriter(OutputStream out/Writer, boolean autoFlush) 可以指定实现自动刷新
public PrintWriter(OutputStream out, boolean autoFlush, String encoding) 可以指定实现自动刷新,并可指定字符的编码
方法 说明
public void println(Xxx xx) 打印任意类型的数据出去
public void write(int/String/char[]/..) 可以支持写字符数据出去

PrintStream和PrintWriter的区别
打印数据的功能上是一模一样的:都是使用方便,性能高效(核心优势)
PrintStream继承自字节输出流OutputStream,因此支持写字节数据的方法。
PrintWriter继承自字符输出流Writer,因此支持写字符数据出去。

IO流-数据流

鸡肋,没啥用

DataOutputStream(数据输出流)

允许把数据和其类型一并写出去。

构造器 说明
public DataOutputStream(OutputStream out) 创建新数据输出流包装基础的字节输出流
方法 说明
public final void writeByte(int v) throws IOException 将byte类型的数据写入基础的字节输出流
public final void writeInt(int v) throws IOException 将int类型的数据写入基础的字节输出流
public final void writeDouble(Double v) throws IOException 将double类型的数据写入基础的字节输出流
public final void writeUTF(String str) throws IOException 将字符串数据以UTF-8编码成字节写入基础的字节输出流
public void write(int/byte[]/byte[]一部分) 支持写字节数据出去

DataInputStream(数据输入流)

用于读取数据输出流写出去的数据。

构造器 说明
public DataInputStream(InputStreamis) 创建新数据输入流包装基础的字节输入流
方法 说明
Public final byte readByte() throws IOException 读取字节数据返回
public final int readInt() throws IOException 读取int类型的数据返回
public final double readDouble() throws IOException 读取double类型的数据返回
public final String readUTF() throws IOException 读取字符串数(UTF-8)据返回
public int readInt()/read(byte[]) 支持读字节数据进来

序列化流

就是将一个Java对象写到一个硬盘文件中

注意:如果对象需要序列化,必须实现序列化接口

想要将Java对象写到一个硬盘上文件中必须实现序列化接口

为什么:默认创建的对象只能在本机电脑的内存中使用,Serializable

transient关键字:当某个成员属性不想序列化到硬盘中,可以使用这个关键字

ObjectOutputStream(对象字节输出流)

l可以把Java对象进行序列化:把Java对象存入到文件中去。

构造器 说明
public ObjectOutputStream(OutputStream out) 创建对象字节输出流,包装基础的字节输出流
方法 说明
public final void writeObject(Object o) throws [IOException] 把对象写出去

ObjectInputStream(对象字节输入流)

可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来。

构造器 说明
public ObjectInputStream(InputStream is) 创建对象字节输入流,包装基础的字节输入流
方法 说明
public final Object readObject() 把存储在文件中的Java对象读出来

lCommons-io是apache开源基金组织提供的一组有关IO操作的小框架,目的是提高IO流的开发效率。

FileUtils类提供的部分方法展示 说明
public static void copyFile(File srcFile, File destFile) 复制文件。
public static void copyDirectory(File srcDir, File destDir) 复制文件夹
public static void deleteDirectory(File directory) 删除文件夹
public static String readFileToString(File file, String encoding) 读数据
public static void writeStringToFile(File file, String data, String charname, boolean append) 写数据
IOUtils类提供的部分方法展示 说明
public static int copy(InputStream inputStream, OutputStream outputStream) 复制文件。
public static int copy(Reader reader, Writer writer) 复制文件。
public static void write(String data, OutputStream output, String charsetName) 写数据

第三方jar包的使用步骤

1.在模块的目录下,新建一个lib文件夹
2.把jar包复制粘贴到lib文件夹下
3.选择lib下的jar包,右键点击Add As Library,然后就可以用了。

标签:字符,字节,输出,void,public,day19,String
From: https://www.cnblogs.com/xkh-blogs/p/17230985.html

相关文章

  • 03_16_JavaWeb||day19_Filter&Listener||day19_Filter&代理模式(23种设计模式之一:用来
    今日内容*Servlet,Filter,Listener被称为JavaWeb三大组件1.Filter:过滤器2.Listener:监听器1.Filter:过滤器概念:生活中的过滤器:净水器,空气净化器,土匪、web中的过滤器:当......
  • 决战圣地玛丽乔亚Day19---
    聚簇索引和非聚簇索引:聚簇和非聚簇的含义是:是否索引和数据进行绑定,即是否需要二次查找才能找到对应的数据值。由于聚簇索引的绑定关系,要求聚簇索引是唯一值,否则不能明确通......
  • 《分布式技术原理与算法解析》学习笔记Day19
    分布式通信:消息队列什么是消息队列?队列是一种具有先进先出特点的数据结构,消息队列是基于队列实现的、存储具有特定格式的消息数据。消息以特定格式放入这个队列的尾部后......
  • 算法随想Day19【二叉树】| LC530-二叉搜索树的最小绝对差、LC501-二叉搜索树中的众数
    LC530.二叉搜索树的最小绝对差这道题只要是在思考怎么不用另外写多一个函数进行递归,且不用多定义一个成员变量min_result,如下所示:intmin_result=INT_MAX;TreeNode*......
  • day19
    1、654最大二叉树classSolution{publicTreeNodeconstructMaximumBinaryTree(int[]nums){returntraversal(nums,0,nums.length);}publ......
  • Day19 - 正则表达式
    正则表达式的概述正则表达式的介绍在实际开发过程中经常会有查找符合某些复杂规则的字符串的需要,比如:邮箱、图片地址、手机号码等,这时候想匹配或者查找符合某些规则的......
  • day19IO流
    1.File类1.1File类概述和构造方法【应用】File类介绍它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正......
  • Day19_06_Vue教程之Vue实例的生命周期
    Vue教程之Vue实例的生命周期一.什么是生命周期Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载DOM、渲染→更新→渲染、卸载等一系列过程,我们......
  • 指针详解(day19)
    5.函数指针释义:指向函数的指针。函数指针的创建实例intAdd(intx,inty){intz;z=x+y;returnz;}intmain(){inta=1;intb=2;printf("\n%d\n",Add(a,......
  • day19 --> (Filter过滤器、Listener监听器)
    Filter:过滤器【JavaWeb三大组件之一:Servlet、Filter、Listener】1、概念生活中的过滤器:净水器,空气净化器,土匪web中的过滤器:当访问服务器的资源时,过滤器可以将请求栏目......