【JavaSE】IO流-各种流整理详解(16)

javase笔记 IDEA创建Java项目的代码结构... 6字面量... 7进制... 7数据类型... 7标识符... 8方法... 9类型转换... 9表达式的自动类型提升... 10输入输出... 10基本运算符... 10分支结构... 11循环结构... 12实例... 13数组... 13对象... 14构造器... 15this关键字... 15封装... 15Javabean(实体类)... 16static. 16继承... 18多态... 20final 21单例类(单例设计模式)... 22枚举类.. 阅读详情

引言

👉猛的发现距离开学还有40天,我还没有底气去应对;
👉加油干;

知识点总结

缓冲流

BufferedStream,缓冲流;也被称作高效流,因为使用起来效率很高;
高效的原因
与之前的流不同,它底层有个专门用来存放数据的缓冲区;就好比快递小哥送快递,之前是用电瓶车送,一次只能送一件;现在换了三轮车,可以一次性拉很多快递;这就是用空间换时间。

字节缓冲流

使用步骤
1.创建普通的文件输入输出流(FileInputStream);
2.把文件输入输出流当参数传递到缓冲流中;
3.调用write/read核心方法输入输出数据
4.关闭流(输出数据时要flush()刷新);
BufferedOutputStream

import java.io.*;

public class Demo01BI {
    public static void main(String[] args) throws IOException {
        //步骤1
        FileOutputStream fos1=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Demo01BW.txt");
        //步骤2
        BufferedOutputStream bos1=new BufferedOutputStream(fos1);
        //步骤3
            for(int i='a';i<='z';i++)
                 bos1.write(i);
        //步骤4    
            bos1.flush();
            bos1.close();

    }
}

BufferedInputStream

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Demo02BO {
    public static void main(String[] args) throws IOException {
         FileInputStream fis1=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Demo01BW.txt");
         BufferedInputStream bis1=new BufferedInputStream(fis1,50);
    int len=0;
       while ((len=bis1.read())!=-1)
           System.out.println((char) len);
    }
}

字符缓冲流

使用步骤
1.创建字符读取/输出流;
2.创建字符缓冲流,把字符流当参数传到缓冲流中;
3.用write/read等核心方法读取/输出数据到缓冲区;
4.关闭流(关闭前会刷新,可不用flush());
BufferedWriter


public class Demo01BW {
    public static void main(String[] args) throws IOException {
        FileWriter  fw1=new FileWriter("C:\\Users\\Administrator\\Desktop\\Demo01BW.txt");
        BufferedWriter  bw1=new BufferedWriter(fw1,5);
        bw1.write("12");
        bw1.newLine();
          for(int i=0;i<10;i++)
               bw1.write("无情");
          bw1.newLine();
          String str="i am a happy boy";
          bw1.write(str,3,4);
          bw1.flush();
          bw1.close();
    }
}

BufferedReader

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Demo02BR {
    public static void main(String[] args) throws IOException {
        FileReader fr1=new FileReader("C:\\Users\\Administrator\\Desktop\\Demo01BW.txt");
        BufferedReader br1=new BufferedReader(fr1);
        int len=0;
        while((len=br1.read())!=-1){
            System.out.println(len);
        }
        br1.close();
    }
}

转换流

编码表是程序把计算机的二进制数据转换为字符的依据;但是编码表有很多种,比如GBK,UTF-8~~;当我们操作的文件默认编码表不一致时,就要用到转换流。

转换输入流

InputStreamReader
构造方法
InputStreamReader(InputStream in, Charset cs)
创建一个使用给定字符集的InputStreamReader。
使用步骤
1.创建字节输入流;
2.创建转换输入流对象,把字节流当参数传递;
3.读取数据;
4.释放资源;

public class Demo05 {
    public static void main(String[] args) throws IOException {
        FileInputStream  fis=new FileInputStream("C:\\Users\\Administrator\\Desktop");
        InputStreamReader isr=new InputStreamReader(fis,"GBK");
        int len=0;
        while((len=isr.read())!=-1)
            System.out.println(len);
        isr.close();
        fis.close();
    }
}

转换输出流

OutputStreamReader
构造方法
OutputStreamReader(InputStream in, Charset cs)
创建一个使用给定字符集的InputStreamReader。

public class Demo06 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("C:\\Users\\Administrator\\Desktop");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
        for (int i = 0; i < 10; i++) {
              osw.write(i);
        }
        osw.flush();
        osw.close();
        fos.close();
    }
}

序列化

序列化流&反序列化流

  • 序列化,指的是是指将一个任意对象(Object) 以二进制的形式存储到文件中;反序列化就是把文件中的二进制流以对象的形式读取。
  • 类的序列化由实现java.io.Serializable接口的类启用。 不实现此接口的类将不会使任何状态序列化或反序列化;序列化接口没有方法或字段,仅用于标识可串行化的语义。
  • 作用可以实现对象的持久存储。
    核心方法
    1.Object readObject()
    从ObjectInputStream读取一个对象;会抛出ClassNotFoundException异常。
    2.void writeObject(Object obj)
    将指定的对象写入ObjectOutputStream。
//自己创建的对象
class beauty implements Serializable {
    int age;
    String name;
    public  beauty(String name,int age){
        this.age=age;
        this.name=name;
    }
    @Override
    public String toString() {
        return "beauty{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
public class Demo01 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
          beauty p1=new beauty("一个月",18);
          ObjectOutputStream  oos=new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\t1.txt"));
             oos.writeObject(p1);
                       //把对象输出到文本中;
             oos.flush();
             oos.close();
   
             ObjectInputStream  ois=new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\t1.txt"));
             Object obj=ois.readObject();
                       //把对象读取出来,返回值是一个对象;
        System.out.println(obj.toString());
    }
}

transient关键字

如果类中有属性不需要可序列化,就可以加上transient修饰符或者static修饰符修饰;

 transient int age;

序列号

当类的性质或其中的属性的性质发生改变时,其序列化锁对应的序列号(SerialVersionUID)会发生改变,会抛出InvalidClassException异常。
在这里插入图片描述
解决方法
创建对象时声明序列号始终不变即可。

   private static final long serialVersionUID=1l;

打印流

PrintStream

作用
打印各种数据
构造方法
1.PrintStream(File file)
使用指定的文件创建一个新的打印流,而不需要自动换行。
2.PrintStream(OutputStream out)
创建一个新的打印流。
3.PrintStream(String fileName)
使用指定的文件名创建新的打印流,无需自动换行。
常用方法
1.println() 【不信你们不知道🤷‍】
2.print(String s)
二者都可以打印任意数据类型;
**setout(PrintStream s)** 这是System中的静态方法,可以改变数据的流向

import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Demo02 {
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("我打印到控制台");
        PrintStream PS=new PrintStream("C:\\Users\\Administrator\\Desktop\\t1.txt");
        System.setOut(PS);
        System.out.println("我打印到文件中了,~~~~~~");
    }
}
2021年JavaSE学习路线 (博主去全力学前端辽咕咕咕) 跟着老韩学JAVA 冲呐! 阅读详情

相关推荐

《JavaSE系列教程》

本专栏内容是为零基础正在学习Java的学习者量身定制的学习路线及方案,本教程字数超20w+,插图超过400+,知识体系极其全面,案例极其丰富。本配备有专门的学习群及学习视频,读者可加学习群与正在学习该阶段的人一同学习,有任何不懂的也可以观看于此教程配套的学习视频。

緑水長流*z 11万+

Java IO 流操作详解

Java IO流提供了一种可以对数据进行输入输出的机制。可以把它比作是一条河流从源头流向目标地,由源文件输入到程序再由程序输出到目标文件。IO即Input/Output顾名思义就是数据的输入输出,在Java中指的是java.io包中的类库,提供了一系列操作数据输入与输出的类和接口。Java NIO(New IO)是JDK1.4引入的新的IO API,能够以更高效的方式进行文件、网络读写等各种I/O操作。

BXA 2499

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

Java基础之IO流详解及使用方式(建议收藏)

Java基础的IO流的基本知识内容详细说明与使用规则

SeeYouAgain的博客 2058

【机电杂谈2】BLDC和PMSM的特点和区别

在日常生活中,小到电动玩具,大到电动汽车,永磁电机的身影可以说是无处不在。有刷直流电机、无刷直流电机、永磁同步电机由于其结构和输出特定的不同也被应用到不同的场合。如果你经常拆一些玩具和家电,就会看到大量的有刷直流电机和无刷直流电机,而永磁同步电机主要应用在高精度的工业伺服和电动汽车领域。本文就从电机的结构和控制方面,对这几种常见的永磁电机做简单的梳理和归纳。

2936

【问题解析】Matlab Function的易错点(Variable Size)

Matlab Function的易错点

CrazyRabbit的博客 9866

【Java 基础篇】Java IO流详解

本文详细介绍了Java IO流的原理、分类、使用场景和常用类。IO流提供了一种统一的方式来处理输入和输出操作,无论是从文件、网络连接还是内存中。通过使用不同的IO流类,我们可以实现数据的读取和写入,满足不同的需求。希望本文对你理解和应用Java IO流有所帮助!

繁依Fanyi的博客 4707

【AI智能体】图像处理-生成营销 Banner 图

生成营销 Banner 图是一款用于制作营销图片的智能体,它可以根据指定的营销活动内容,快速生成活动 Banner 图片,降低活动运营成本、提高制图效率。

AI创变工坊,和1000万新个体创业者一起成长!愿大家都能跟上时代的洪流,不被社会淘汰,愿大家的生活工作收入都能具备竞争力! 1175

JAVA—IO流详解

IO:Input/Output即输入&输出,也称之为流(河流,水流),指的是数据从一个地点到另一个地点过程;对于计算机来说文件的拷贝过程,文件的编写保存,显示功能都是使用到IO;将数据的传输过程看做一个输入输出。现实角度考虑可以将耳朵作为输入流,将嘴巴当做输出流输入输出介质:文件网络键盘(输入)显示器(输出)

weixin_48006490的博客 8624

抖音风控参数逆向实战:从bd-ticket-guard-client-data到x-tt-session-dtrait的完整攻防解析

本文深入解析抖音风控参数逆向实战,重点剖析bd-ticket-guard-client-data和x-tt-session-dtrait的生成机制与破解方法。通过抓包调试、ECDH密钥生成、RSA与AES双层加密等技术手段,揭示抖音风控系统的核心逻辑,并提供实用的对抗策略与维护建议,助力开发者突破抖音风控限制。

weixin_30335575的博客 676

华为OD机试真题 新系统-等距二进制判断(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【等距二进制判断】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【等距二进制判断】

qq_45776114的博客 1086

Java IO流基础篇及其图解

它继承自Reader类,通过将字符数据存储在内部的缓冲区中,减少了对底层Reader的单个字符读取次数,从而提高读取性能。它继承自Writer类,通过将字符数据存储在内部的缓冲区中,减少了对底层Writer的单个字符写入次数,从而提高写入性能。字符缓冲流通过内部的缓冲区,将数据从底层的字符流中读取或写入,减少与底层流的直接交互次数,从而提高读写的效率。用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文。OutputStream:字节输出流的所有类的超类。

2301_78523177的博客 1331

手把手入门YOLO到改进优化教程 | 【P1基础篇】YOLOv8网络架构原理

本节先来学习基础知识,以YOLOv8进行讲解入门, 拿YOLOv8入手掌握YOLO的底层逻辑 ,也可以基于此来轻松学习后面更新的YOLO系列 (大部分YOLO版本的核心思想一致,更新是基于旧版本做结构升级、优化策略,学习成本会越来越低)。

嵌入式阿齐Archie 2万+

JavaSE重点复习

JavaSE回顾 一、 Object1 方法1.1 boolean equals(Object obj)1.2 hashCode1.3 fianlize1.4 clone2 实体定义企业级规则二、 集合1 Collection1.1 List1.2 Set2 Map3 java.util.concurrent.*三、 IO1.分类2 Stream3 Reader|Writer4 Object流四...

时间静止 7437

D16: OpenClaw + Notion API:知识管理新玩法

本文介绍了如何利用OpenClaw连接Notion API构建自动化知识管理系统。文章首先分析了传统知识管理的痛点,包括信息分散、更新不及时等问题,并对比了Notion与其他工具在API完整性、结构化程度等方面的优势。接着详细说明了Notion API的获取和授权流程,并设计了包含项目知识库、技术决策库和会议纪要库的三层架构系统。最后通过会议纪要自动归档的实战案例,展示了如何通过YAML配置实现从飞书会议到Notion的自动化知识沉淀流程。该方案能有效解决团队知识管理中的信息碎片化问题,提升协作效率。

刘一说的IT专栏 274

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaSE核心知识点03高级特性03-03(IO流)

JavaSE核心知识点03高级特性03-03(IO流)

感谢阅读 1151

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

javase主要内容

JavaSE 的主要学习内容--java 基础(重点)1.java语法2.面向对象3.java API JavaSE 是Java平台标准版的简称(Java Platform, Standard Edition) (also known as Java 2 Platform) ,用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。JavaSE包括用于开发Java Web服务的类库...

weixin_30782331的博客 4018

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一文通览JavaSE

复习javase看这篇文章就足够了,精简不啰嗦,适合有基础的复习用

勇往直前的博客 1654

最新《JavaSE系列教程》_javase教程(3),大佬分享开发经验

内容包括Java基础语法、面向对象、接口、多态、内部类、数据结构、集合、异常、IO流、多线程、网络编程、TCP、UDP协议通信原理、类加载器、注解、反射、Junit、Lombok、枚举、类加载器、动态代理等包含JavaSE大多数的知识体系,后续还会陆续更新;

2401_84247423的博客 761

JavaSE

Q1、 String 、StringBuffer、StringBuilder 区别及底层实现 1、String是字符串常量, StringBuffer、StringBuilder是字符串变量 2、StringBuffer线程安全(方法用了synchronized修饰)、StringBuilder线程不安全 3、底层都是char[],String用了final 修饰,后二者初始容量是16+字符串的长...

hni_94的博客 748

【JavaWeb】【Java基础:流】

👏📢本文由 【九九舅舅酒酒】 原创,首发于 优快云🙉🙉🙉📢由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!✨📖精品专栏(不定时更新)【Web】📖精品文章========⭐ 掌握Java中基本的IO流的基本原理⭐ 熟悉Java的IO流的使用前言==在前期JavaSE基础的学习过程中,从在控制台输出第一句的HelloWorld开始,我们就反复在和内存打交道。几乎没有和磁盘,外存,硬存有过亲密接触!

2401_84046577的博客 1079

15【IO流增强】_打印流和缓冲流哪个更快

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

2401_84264244的博客 1009

JavaSE 网络编程 入门

JavaSE 网络编程 入门

ke1494057235的博客 358

万字整理JavaSE核心知识:从面向对象到并发编程的实战指南

面向对象编程是Java语言的基石,其核心思想包括封装、继承和多态,旨在通过抽象和模块化提升代码的可维护性与复用性。在Java标准版中,集合框架、IO流和多线程并发是支撑工程实践的关键技术组件。集合框架如HashMap通过数组、链表和红黑树的数据结构实现高效的数据存储与检索,其扩容机制和线程安全问题是开发中的常见考点。多线程并发编程则涉及线程生命周期管理、同步机制以及JMM内存模型,其中synchronized关键字和volatile变量分别用于保证原子性与可见性,是构建高并发应用的基础。这些技术共同服务于企

aodiyi6351的博客 394

JavaSE『学习笔记』

本教程以 JDK8 为主,新版本与新特性以介绍与使用为辅。

小哞^同^学的技术博客 1236

【JavaWeb】【Java基础:流,Java开发笔试题大全带答案

由于篇幅原因,就不多做展示了一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长![外链图片转存中…(img-hf19DAVd-1712789037086)]

2401_84140653的博客 798
上一篇: 【JavaSE】过滤器&IO流(15)
下一篇: 【JavaSE】网络编程(17)
高冷小伙
博客等级 码龄7年 223粉丝 182原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值