《JavaEE》第七周day3学习笔记-IO流2

一、缓冲流

是字节流和字符流的增强类,包含BufferedInputStream、BufferedOutputStream 、BufferedReader、BufferedWriter,相比于原始流,缓冲流增加了缓冲区的概念,通过将文件部分加载至内存缓冲区,达到减少文件I/O的目的,提高程序效率。
Tip(JDK1.7+)IO流语句可以放置于try(){}catch(){}的try括弧中,在try语句块结束后自动关闭流。

(一)字节缓冲流


缓冲区大小:private static int DEFAULT_BUFFER_SIZE = 8192;

public BufferedInputStream(InputStream in) 创建字节输入缓冲流
public BufferedOutputStream(OutputStream out)创建字节输出缓冲流

(二)字符缓冲流


public BufferedReader(Reader in)创建字符输入缓冲流
public BufferedWriter(Writer out)创建字符输出缓冲流

特殊方法

BufferedReader:public String readLine()读取一行字符串
BufferedWriter:public void newLine()写入换行符号

二、转换流

计算机存储的数据为二进制,通过不同的字符集进行转换,形成可以直观看到的文本信息,这个过程称为解码,反之称为编码。
常用的字符集:

  • ASCII
  • GB2312→GBK→GB18030
  • UTF-8→UTF-16→UTF-32

注意,windows和idea默认字符集不一致,写入读取文件时需要进行转换,所以才需要转换流。

(一)java.io.InputStreamReader


InputStreamReader(InputStream in)构造方法1,使用默认字符集(idea:UTF-8InputStreamReader(InputStream in, String charsetName)构造方法2,使用指定字符集charsetName

注意,如果读取时字符集错误,那么调用OutputStreamWriter写入文件均是错误的!

(二)java.io.OutputStreamWriter


OutputStreamWriter(OutputStream in)构造方法1
OutputStreamWriter(OutputStream in, String charsetName)构造方法2,使用指定字符集charsetName

三、序列化

Java提供了一种持久化保存对象信息的方式,即序列化。使用序列化时,类需要实现Serializable接口,并设置serialVersionUID以确定反序列化时的目标类。
serialVersionUID可以通过程序算法生成,也可以手动设置;idea自动生成serialVersionUID:Editor-Inspections-Serialization issues-Serializable class without ‘serialVersionUID’,然后在类名处Alt+Enter即可。
注意,transient 修饰的属性不会被序列化。

(一)序列化对象


ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("stus.txt"));
objectOutputStream.writeObject(set);

(二)反序列化对象


ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("stus.txt"));
Set<Student> studentSet = (Set)objectInputStream.readObject();

四、内存流

如果流目标不是硬盘中的文件,而是内存中的区域,则应使用内存流,通常用于需要反复读取的临时数据。

(一)ByteArrayInputStream


public ByteArrayInputStream(byte buf[])构造方法1
public ByteArrayInputStream(byte buf[], int offset, int length)构造方法2

(二)ByteArrayOutputStream


数据被写入一个内存数组(protected byte buf[];),可以使用toByteArray()方法获取byte数组、toString()方法获取字符串

public ByteArrayOutputStream()构造方法1,设置默认size=32
public ByteArrayOutputStream(int size)构造方法2

五、随机流

随机访问流是具有指针的数据流,可以在文件的任意位置进行读写,亦可实现断点续传。

    public static void main(String[] args) throws IOException {
        RandomAccessFile newFile = new RandomAccessFile("new.txt","rw");
        RandomAccessFile oldFile = new RandomAccessFile("old.txt","r");
        newFile.seek(newFile.length());//newFile.length()为当前断点指针,下同
        oldFile.seek(newFile.length());
        byte[] buff = new byte[1024];
        int len;
        while((len = oldFile.read(buff))!=-1){
            newFile.write(buff,0,len);
        }
        newFile.close();
        oldFile.close();
    }

六、打印流

PrintStream继承自FilterOutputStream,负责实现输出打印功能(System.out),PrintStream有自动刷新机制(自动调用flush()方法)。

(一)通过改变打印流实现输出至文本


    public static void main(String[] args) throws FileNotFoundException {
        System.out.println(97);
        PrintStream ps = new PrintStream("hello.txt");
        System.setOut(ps);//重新设置系统输出流
        System.out.println(97);
    }

(二)PrintWriter类


public void write()输出ASCII字节码;
public void print()输出字符;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaEE学习笔记是我自己在学习过程中总结的javaweb各项技术和知识点。它包含了JavaEE的十三种核心技术,分别是JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF。 JavaEE是一个开放的标准的组件体系结构,它独立于平台,但使用Java语言。一个JavaBean是一个满足JavaBeans规范的Java类,通常定义了一个现实世界的事物或概念。一个JavaBean的主要特征包括属性、方法和事件。 在支持JavaBeans规范的开发环境中,可以可视地操作JavaBean,也可以使用JavaBean构造出新的JavaBean。JavaBean的优势还在于Java带来的可移植性。所以在JavaEE学习笔记中,你可以找到关于这些核心技术和JavaBean的详细内容和示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [javaEE学习笔记](https://download.csdn.net/download/sugar_map/10268742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JavaEE学习笔记整理](https://blog.csdn.net/qq_51861704/article/details/124133294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值