Java 简单笔记——IO流(三)

韩顺平 Java IO流 自学笔记 自己照着课程写得IO笔记 阅读详情

为了后面这两个重要的流,再单独开一篇。

一、对象流

作用: 传输对象(引用数据类型)
特点:
1.基本数据类型使用数据流来实现传输,而引用数据类型则可以是用对象流传输;

2.使用对象流可以将对象存储到硬盘中,断电后不消失,所使用的机制称为序列化机制;
在这里插入图片描述
3.并不是所有的类都可以使用序列化机制,自定义类若想使用序列化则需要满足以下条件:

  • 自定义类需实现Serializable接口或Externalizable接口
  • 类中所用到的属性也需要实现Serializable接口或Externalizable接口
  • 凡是实现Serializable接口的类必须声明一个版本的序列号serialVersionUID,默认情况下序列号会随生成,但是为了兼容版本的特性,最好自己声明;
    在这里插入图片描述
  • ObjectOutputStream 和 ObjectInputStream不能序列化被static和transient所修饰的成员变量

分类: 输入对象流(ObjectInputStream)\ 输出对象流(ObjectOutputStream)
使用:

import org.junit.jupiter.api.Test;

import java.io.*;

public class Main implements Serializable{
    //1.对象的序列化过程:对象转化为二进制流写入到硬盘中
    @Test
    public void Object()  throws Exception {


        Preson p1=new Preson("小明",23);
        Preson p2=new Preson("小红",24);

        //指明写入位置匿名类对象
        ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("Text4.txt"));
        //写入
        out.writeObject(p1);
        out.flush();

        out.writeObject(p2);
        out.flush();

        //关闭流
        out.close();
    }
    class Preson implements Serializable{//Serializable没有抽象方法,所以不用重写

        private static final long serialVersionUID = 1L;
        String name;
        Integer age;


        public Preson(String name, Integer age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }

        public Integer getAge() {
            return age;
        }

        public  void SetName(String name){
            this.name=name;
        }
        public void SetAge(Integer age){
            this.age=age;
        }

        @Override
        public String toString() {
            return "Preson{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }

    }

    //2.对象的反序列化过程  为二进制流转化对象
    @Test
    public void InObject () throws Exception {

        //选择还原的位置
        ObjectInputStream Inobj=new ObjectInputStream(new FileInputStream("Text4.txt"));

        //输出
        Preson p1=(Preson)Inobj.readObject();
        System.out.println(p1);

        Preson p2=(Preson)Inobj.readObject();
        System.out.println(p2);

        Inobj.close();

    }

}

在这里插入图片描述

(关于序列化的问题找个需要另外写一篇博客)

二、RandomAccessFile类

作用: RandomAccessFile类是一个特殊的流,既实现输入,也可以实现输出,并且支持 “随机访问(在一段数据中指定的位置访问)” 的特点;
特点: RandomAccessFile类有两个特殊的方法:

  • long getFilePointer():获取文件记录指针的当前位置
  • void seek(long pos):将文件记录指针定位到 pos 位置
    在这里插入图片描述
  • 如果想使用该类,必须先使用该类的构造器创建对象
    在这里插入图片描述

方法和作用:

  • void seek​(long pos) 改变指针的位置,默认从0开始,数字代表指针前面字节的个数。
  • long getFilePointer() 返回此文件中的当前偏移量。
  • void write​(int b) 将指定的字节写入此文件。
  • void write​(byte[] b) 从当前文件指针开始,将指定字节数组中的 b.length字节写入此文件。
  • void write​(byte[] b, int off, int len) 将从偏移量 off开始的指定字节数组中的 len个字节写入此文件。
  • String readLine() 从此文件中读取一行文本。

使用:

1.实现覆盖效果:
在这里插入图片描述

 @Test
    public void  RandomAccessFile2() throws Exception{
        RandomAccessFile ran3=new RandomAccessFile(new File("Text4.txt"),"rw");
        ran3.seek(4);
        ran3.write("kk".getBytes());//getBytes()将字符串转换为字节数组
    }

在这里插入图片描述


2.插入效果

在这里插入图片描述

	@Test
       public void  RandomAccessFile2() throws Exception{
       RandomAccessFile ran3=new RandomAccessFile(new File("Text4.txt"),"rw");
       ran3.seek(4);
       String str=ran3.readLine();//读取4以后的字符并移动指针到末尾

       ran3.seek(4);
       ran3.write("HH".getBytes());
       ran3.write(str.getBytes());

}

在这里插入图片描述

3.多行文本插入效果(保留换行符)
在这里插入图片描述

	@Test
    //2.从文件任意位置读取、写入
    public void  RandomAccessFile2() throws Exception{
        RandomAccessFile ran3=new RandomAccessFile(new File("Text4.txt"),"rw");

        ran3.seek(6);
        byte[] b=new byte[10];//创建一个可以存储10字节的数组
        int len;
        StringBuffer sb=new StringBuffer();//可变字符串
        while((len=ran3.read(b))!=-1){
            sb.append(new String(b,0,len));//将获取到的字符依次添加到可变字符串中
        }
        
        ran3.seek(6);
        ran3.write("oo".getBytes());
        ran3.write(sb.toString().getBytes());//调用toString方法转化为字符串,而后使用getBytes()方法转换为数组
        ran3.close();
    }

在这里插入图片描述

PS:
1.使用StringBuffer的toString()方法,可以将StringBuffer转换成String

Super4PCS文章阅读笔记 Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法... 阅读详情

相关推荐

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3330

Java IO流详解

原文 Java IO流详解 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 IO又分为流IO(java.io)和块IO(java.nio) Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的

ss810540895的博客 1万+

AIGC大模型应用教学平台

该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也可以运行文生图扩散模型Stable Diffusion,提供大模型微调、量化、转换和加速推理服务。在此基础上,平台还提供常见的生成式AI应用,包括AIGC知识抽取增强(RAG)、AIGC绘画、AIGC会话聊天、数字虚拟人等应用,以便学生能够掌握最新的生成式AI模型微调、提示工程和智能体应用技能。

中智讯的博客 1203

Java学习笔记——IO流

IO流的作用:读写文件数据。

weixin_44456914的博客 2107

【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用

SALSA使用探索 之前做项目时想做人物说话的嘴部动作,因为我们的语音是AI合成的,语音片段很多,如果能根据语音生成嘴部动画,那将极大便利我们的工作。后面是找到了SALSA的这款插件,并摸索出使用方法。 1 插件介绍 官方网站:https://crazyminnowstudio.com/ 一个能做2D纸片人和3D人物模型嘴部和眼睛动画的插件,由两人组成的独立工作室(疯狂米诺工作室)开发。 插件全名为SALSA With RandomEyes,2014年上架Asset Store,目前是已下架,替换为新版本

里约热内驴的博客 1万+

centos7安装db2 version11.1

centos7安装db2 version11.1

AKA石头 1061

【Java IO流】IO流详解

IO,即InputOutput,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接Java中是通过流处理IO的,那么什么是流?流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道当Java程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当Java程序需要写入数据的时候,就会开启一个通向目的地的流。

m0_55908255的博客 1692

别再手动转格式了!用Java+LibreOffice命令行实现Word批量转PDF(附Docker部署避坑指南)

本文详细介绍了如何利用Java和LibreOffice命令行实现企业级Word批量转PDF的自动化解决方案,包括多线程优化、Docker化部署及常见问题排查。通过代码示例和实战经验,帮助开发者高效处理文档转换需求,提升工作效率并避免常见陷阱。

552

Java IO流知识点总结

I(Input)O(Output) 通过IO可以处理程序与外部环境之间的数据传输。

weixin_43836337的博客 1867

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4043

模拟一个基站和一个移动台之间的信号传播

同样使用时间序列和上述参数计算出反射径信号的信号强度。根据时间序列和上述参数,计算出直射径信号的信号强度。该信号被视为一个简单的正弦波信号,其频率是2Hz。:时间序列,从0.1秒开始,每隔0.0001秒采样一次,直到12秒。:设置坐标轴范围,横轴范围为0到12秒,纵轴范围为-0.5到0.5。:移动台移动的速度。:移动台距离基站的初始距离。:基站到反射墙的距离。假设基站到反射墙的距离为15米。:绘制直射径信号、反射径信号和合成信号的波形图。:添加标签,标注每条曲线对应的含义。表示反射径信号的颜色为绿色,

Fanjufei的博客 290

java的io流有什么作用_Java IO流详解(一)——简单介绍

文件在程序中是以流的形式来传输的。所以用Java来传输文件就得使用到Java IO流。1、流的概念和作用流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。作用:为数据源和目的地建立一个输送通道2、Java IO所采用的模型Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式(这篇博...

weixin_33602738的博客 4558

交换机初始化配置详解

MGMT或称MGT(Management Port,管理端口)是一个可以连接计算机的三层主机端口,如下图所示。只需使用一条双绞线跳线,就可以将计算机的以太网端口与交换机的MGMT端口连接在一起,实现对交换机的配置与管理。也就是说,可以使用MGMT端口代替Console端口实现对交换机或交换机堆叠的网络管理。MGMT端口既可用于交换机的初始化,也可以在交换机初始化完成后,以Telnet、Web浏览器或Cisco CNA方式进行管理。当将计算机连接到独立的交换机时,连接方式如下图所示。

悦分享 1992

IO流笔记

总之,Java 的 IO 流提供了丰富的功能,使程序能够与各种外部数据源进行高效的数据交互。它实现了数据的读取(输入流)和写入(输出流)操作,是程序与外部世界进行交互的重要手段。IO框架的含义:封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。● 字节流:以字节为单位进行数据处理,适用于处理二进制数据,如图片、音频、视频等。框架的含义:解决某类问题,编写的一套类、接口等,可以理解成一个半成品,大多框架都是第三方研发的。

2401_87053441的博客 1583

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java IO流笔记 (搬运)

文章目录@[toc]**1、流的概念和作用****1.2、Java IO所采用的模型**1.3、IO流的分类1.4、IO流特性1.5、IO流常用到的五类一接口**1.6、Java IO流对象**1.6.1、输入字节流InputStream1.6.2、输出字节流OutputStream1.6.3、字符输入流Reader1.6.4、字符输出流Writer1.6.5、字节流和字符流使用情况:(重要)1.7、字符流与字节流转换1.8、字节流和字符流的区别(重点)**1.9、System类对IO的支持** [外链图片

程序员小章的博客 1895

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java——IO流

存储和读取数据的解决方案IO流和File是息息相关的。

pangyaqi的博客 1707

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java IO流学习笔记

为避免各种流与处理流以及父类之间的关系混乱,需要总结梳理一下它们的关系将其总结为思维导图Date:2〇24年8月12日。

wel2788266275的博客 1461

Java IO流之IO流基础

IO流介绍 IO基础之File类 IO流之字符流 IO流之字节流 IO流之Scanner类

Mr.mooye 2847

java IO流学习总结

学习了几天的java IO流,下面我来谈谈对java 输入输出流IO的个人见解吧! 转载自:https://blog.youkuaiyun.com/zhaoyanjun6/article/details/54292148/ java流类结构图 一.流的概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输; 例如从水源地长江把水导入自来水厂,然后又从自...

coder150806的博客 5万+

Java学习基础笔记——IO流

Java基础之IO流部分学习

jiangnank的博客 1195

【Java学习笔记】IO流

文件流:文件在程序中是以流的形式来操作的流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径参数为一个File对象通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。通过打于到实际文件的连接来创建FileInputstrean,该文件通过文件系统中的路径名 name 指定。传入一个 File 对象创建文件输出流。

2401_88623584的博客 1018

Java学习笔记-IO流

存储和读取数据的解决方案。作用:IO流用于读写文件中的数据,

qq_45773654的博客 1250

Java——IO流(上)

详细介绍了什么是IO流,IO流的经典,进阶写法,IO流类的体系和IO的四大抽象类,为接下来IO流的学习打好基础

2301_80867182的博客 1101

Java-IO流基础

当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个IO流对象的相关方法可以顺序读取数据源中的数据。IO流相当于一个管道。

2402_88479893的博客 1106

java io流不关闭有什么后果_Java IO流

一、基本概念 IO是Java对数据的操作是通过流的方式,数据传输是需要通道的,而IO流就是数据传输的通道。IO流可以形象的比喻为运送货物的传输带。IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。总结一下,Java IO输入机制就是为了允许程序读取外部数据(包括来自于磁盘、光盘等存储设备的数据)和用户输入的数据。 Java的IO流通过java...

weixin_39563827的博客 2325

Java IO流

装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强的功能。装饰器模式System.out.println("我是" + name + ",可以在屏幕上显示");// 功能更强的方法System.out.println("还可以投影,在墙壁上显示");System.out.println("===============装饰后");IO流体系中的装饰器模式IO流体系中大量使用了装饰器模式,让流具有更强的功能、更强的灵活性。

m0_68880377的博客 1123
上一篇: Java 简单笔记——IO流(二)
下一篇: Java 简单笔记——多线程
Jiashun Hao
博客等级 码龄8年 209粉丝 81原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值