当前位置: 首页 > news >正文

零基础学Java第二十二天之IO流之内存流,打印流,随机流

IO流之内存流,打印流,随机流

1、内存流

1、理解

内存流"(Memory Stream)在计算机编程中通常指的是一种特殊的数据流,它在内存中存储和操作数据,而不是在外部存储(如硬盘、网络等)上进行。内存流提供了对数据流(如字节数组)的访问,就好像这些数据是存储在外部资源上一样,但实际上它们是在内存中直接操作的。

2、特点

  1. 速度快:由于数据在内存中,所以读取和写入操作通常比磁盘I/O或网络I/O要快得多。
  2. 方便性:内存流提供了与文件流或网络流类似的接口,使得开发者可以使用统一的模式来处理不同来源的数据。
  3. 临时性:内存流常用于存储临时数据,这些数据在程序运行期间需要被操作,但在程序结束后不再需要。

3、应用场景

  • 序列化与反序列化:对象可以序列化为字节数组并存储在内存流中,之后可以从内存流中反序列化回对象。
  • 图像处理:在处理图像时,可以将图像数据加载到内存流中,进行修改,然后再保存回文件或发送到网络。
  • 压缩与解压缩:数据可以在内存流中进行压缩或解压缩,而不必先写入磁盘或网络。
  • 网络编程:在网络编程中,内存流可以用于暂存从网络接收的数据,或准备要发送到网络的数据。

4、案例

1、内存输入流
package com.xx.neicun;import java.io.ByteArrayInputStream;
import java.io.IOException;public class Test01 {public static void main(String[] args) {//1.创建内存流输入对象ByteArrayInputStream bais = new ByteArrayInputStream("123木头人".getBytes());//2.关闭资源try {bais.close();} catch (IOException e) {e.printStackTrace();}//3.读取数据//这里定义了一个名为bs的字节数组,并初始化为长度为1024。这个数组将用于存储从输入流中读取的数据。byte[] bs=new byte[1024];//变量len将用于存储每次从输入流中读取的字节数。int len;try {//这是一个while循环,它将一直执行,直到bais.read(bs)返回-1。当read方法返回-1时,表示输入流中没有更多的数据可读,即已经到达了流的末尾。while((len=bais.read(bs))!=-1){System.out.println(new String(bs,0,len));}} catch (IOException e) {e.printStackTrace();}}
}
2、内存输出流
package com.xx.neicun;import java.io.ByteArrayOutputStream;
import java.io.IOException;public class Test02 {public static void main(String[] args) throws IOException {//1.创建内存输出流对象ByteArrayOutputStream baos = new ByteArrayOutputStream();//2.关闭资源,内存流时程序到内存的通道,关不掉的baos.close();//3.写入数据baos.write("123木头人".getBytes());//获取数据byte[] bs = baos.toByteArray();System.out.println(new String(bs));//获取数据String str = baos.toString();System.out.println(str);}
}

2、打印流

1、理解

打印流(PrintStream 和 PrintWriter)是用于方便地打印各种数据类型到输出流(如文件、控制台等)的类。这些类提供了许多重载的print()println()printf()方法,允许你以不同的格式打印数据。

2、特点

PrintStream

PrintStream是Java标准库中的一个类,它扩展了OutputStream类,并提供了方便的打印功能。通常,你会使用System.out(控制台输出)或System.err(错误输出)这两个PrintStream的实例。

PrintWriter

PrintWriter是另一个用于打印的类,但它扩展了Writer类,因此它用于字符输出流。PrintWriterPrintStream更强大,因为它支持字符编码,并且可以很容易地处理字符数据。

3、案例

1、字节打印流
package com.xx.println;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
//打印流只有一个方向
public class Test01 {public static void main(String[] args) throws IOException {//1.创建打印流对象//PrintStream ps = new PrintStream("xx.txt");//1.创建打印流对象,将字节流转换为字节打印流//PrintStream ps = new PrintStream(new FileOutputStream("xx.txt"));//1.创建打印流对象,将字节流转换为字节打印流+末尾朱家PrintStream ps = new PrintStream(new FileOutputStream("xx.txt",true));//2.写入数据ps.println("123muroyu");//关闭资源ps.close();}
}
2、字符打印流
package com.xx.println;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;public class Test02 {public static void main(String[] args) throws IOException {//1.创建字符流对象//PrintWriter pw = new PrintWriter("xx.txt");//1/创建字符流对象,将字节流转换为字符打印流//PrintWriter pw = new PrintWriter(new FileOutputStream("xx.txt"));//1.创建字符打印流,将将字符流转换为字符打印流//PrintWriter pw = new PrintWriter(new FileWriter("xx.txt"));//1.创建字符打印流,将将字符流转换为字符打印流+末尾追加PrintWriter pw = new PrintWriter(new FileWriter("xx.txt",true));//2写入数据pw.println("123木头");//3关闭资源pw.close();}
}

3、随机流

1、理解

随机流(RandomAccessFile)是一种特殊的文件流,它允许对文件内容进行随机访问和读写操作

RandomAccessFile是Java中的一个类,它直接继承自Object类,并且同时实现了DataInput和DataOutput接口。这个类提供了支持随机文件操作的方法,不区分输入流和输出流,对文件的访问一定要指定访问方式。通过RandomAccessFile,程序可以直接跳转到文件的任意地方来读写数据,这在网络请求中的多线程下载及断点续传等场景中非常有用。在RandomAccessFile内部,有一个大的字节数组,可以通过指针进行操控。当我们进行随机访问时,让指针指向对应的字节,就可以从当前字节开始读或写。总的来说,随机流是一种非常灵活的文件流,它可以大大提高对文件操作的效率。

2、四种模式

  1. “r” (只读模式)

    :

    • 使用只读模式打开文件,只能对文件进行读取操作,无法修改文件内容。
    • 如果文件不存在,将会抛出FileNotFoundException
    • 调用结果对象的任何write方法都将导致抛出IOException
  2. “rw” (读写模式)

    :

    • 使用读写模式打开文件,允许对文件进行读取和写入操作,并且可以修改文件内容。
    • 如果文件不存在,则尝试创建该文件。
    • 写入操作可能不会被立即同步到底层存储设备,因此在系统崩溃时可能会丢失数据。
  3. “rws” (同步读写模式)

    :

    • 除了具有读写模式的功能外,该模式还要求对文件的内容和元数据的每个更新都同步写入到底层存储设备。
    • 同步更新确保对文件的更改被安全地写入到底层的存储设备中,从而降低了数据丢失的风险。
    • "rws"选项确保内容和元数据(如文件的最近更改时间戳等信息)的持久化。
  4. “rwd” (同步数据读写模式)

    :

    • 与"rws"模式类似,但只要求对“文件的内容”的每个更新都同步写入到基础存储设备,而不要求同步元数据。
    • 这也降低了数据丢失的风险,但可能不如"rws"模式那样全面保护数据。

3、案例

1、利用 随机访问流 将数据写入到文件
package com.xxio08;import java.io.IOException;
import java.io.RandomAccessFile;public class Test01 {/*** 知识点:利用 随机访问流 将数据写入到文件* * 1)写入数字、英文、中文*/public static void main(String[] args) throws IOException {//1.创建流对象//这里创建了一个RandomAccessFile对象w,并指定了文件名为"xx.txt"和访问模式为"rw"(读/写)。如果文件不存在,它将被创建;如果文件已存在,则内容将被覆盖(从文件开始处)。RandomAccessFile w = new RandomAccessFile("xx.txt", "rw");//2.写入数据w.write("123abc木头人".getBytes());//3.关闭资源 w.close();}
}
2、利用 随机访问流 将数据写入到文件
package com.xx.io08;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;public class Test02 {/*** 利用 随机访问流 将数据写入到文件* * 1)写入数字、英文、中文* 2)在文件末尾追加*/public static void main(String[] args) throws IOException {//1.创建流对象File file = new File("xx.txt");RandomAccessFile w = new RandomAccessFile(file, "rw");//设置指针,文件末尾w.seek(file.length());//2.写入数据w.write("123abc木头人".getBytes());//3.关闭资源w.close();}
}
3、利用 随机访问流 读取文件里的数据
package com.xx.io08;import java.io.IOException;
import java.io.RandomAccessFile;public class Test03 {/*** 知识点:利用 随机访问流 读取文件里的数据* * 1)读取数据*/public static void main(String[] args) throws IOException {//1.创建流对象,										只读RandomAccessFile r = new RandomAccessFile("xx.txt", "r");//2.读取数据byte[] bs = new byte[1024];int len;while((len = r.read(bs)) != -1){System.out.println(new String(bs, 0, len));}//3.关闭资源r.close();}
}
4、利用 随机访问流 读取文件里的数据
package com.qf.io08;import java.io.IOException;
import java.io.RandomAccessFile;public class Test04 {/*** 利用 随机访问流 读取文件里的数据* * 1)读取数据* 2)从英文处开始读取*/public static void main(String[] args) throws IOException {//1.创建流对象					//只读RandomAccessFile r = new RandomAccessFile("xx.txt", "r");//设置指针,从下标为3开始r.seek(3);//2.读取数据byte[] bs = new byte[1024];int len;while((len = r.read(bs)) != -1){System.out.println(new String(bs, 0, len));}//3.关闭资源r.close();}
}

相关文章:

零基础学Java第二十二天之IO流之内存流,打印流,随机流

IO流之内存流,打印流,随机流 1、内存流 1、理解 内存流"(Memory Stream)在计算机编程中通常指的是一种特殊的数据流,它在内存中存储和操作数据,而不是在外部存储(如硬盘、网络等&#xf…...

vue-router路由懒加载以及三种实现方式

什么是路由懒加载? 延迟加载或按需加载路由所对应的组件,而不是在应用初始化时就一次性加载所有组件。 路由懒加载做了什么事情? 主要作用是将路由对应的组件打包成一个个的js代码块 只有在这个路由被访问到的时候,才加载对应…...

Java轻松转换Markdown文件到Word和PDF文档

Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择。但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的文档格式呈现。通过将 Markdown 转换为 Word 和…...

【JAVA基础之内部类】匿名内部类

🔥作者主页:小林同学的学习笔录 🔥小林同学的专栏:JAVA之基础专栏 目录 1.内部类 1.1 概述 1.1.1 什么是内部类 1.1.2 什么时候使用内部类 1.2 内部类的分类 1.3 成员内部类 1.3.1 获取成员内部类对象的两种方式 1.3.2 经典面试…...

远动通讯屏的原理和应用

远动通讯屏的原理和应用 远动通讯屏,是一种集显示和远程控制于一体的智能化控制设备。它可以通过网络、通信线路等方式实现与远程设备的通讯和交互,从而实现远程监控和控制。 远动通讯屏实现远程控制的核心原理是基于PLC(Programmable Logic …...

C++ (week4):Linux基础

文章目录 零、Linux简介1.配置环境2.Linux历史3.Linux模型 一、vim二、Linux命令行 (shell命令)1.常用命令与快捷键(1)常用命令①man命令:查看帮助手册 (2)快捷键 2.用户子系统(1)Linux用户(2)用户命令 3.文件子系统命令(1)目录命令1.创建文件:mkdir2.删…...

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡?我们的智能手机可以充当个人点唱机,因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏,将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…...

JKTECH柔性振动盘用途

柔性振动盘的作用与用途 在现代工业自动化领域,柔性振动盘凭借其独特的功能和广泛的应用场景,正逐渐成为生产线上的重要工具。柔性振动盘,又称柔性供料器,它结合了传统振动盘的高效性和现代自动化技术的灵活性,为各种…...

【职场心灵伴侣】文心一言智能体

【文心一言】智能体 写在最前面名称和简介:职场心灵伴侣AI生成头像添加工具智能体调优 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限…...

【运维】笔记本电脑风扇清洁

笔记本电脑是我们不可或缺的工具,无论是工作、学习还是娱乐。然而,随着时间的推移,笔记本电脑的性能可能会因为各种原因受到影响,尤其是散热问题。过热不仅会降低性能,还可能缩短硬件的寿命。最近,在使用我…...

3.1 掌握RDD的创建

在Apache Spark中,RDD(Resilient Distributed Dataset)是一个基本的、不可变的、分布式的和可分区的数据集。它能够自动进行容错处理,并支持在大规模集群上的并行操作。RDD之间存在依赖关系,可以实现管道化&#xff0c…...

深入理解 Java 中的 `volatile` 关键字:可见性与有序性的保障

深入理解 Java 中的 volatile 关键字:可见性与有序性的保障 volatile主要做了两个事情可见性保证 和 有序性 可见性保证就是: 对volatile的写操作会对其他线程可见。 简单来说我们A线程的修改了volatile的值,那么我B线程也可以看见。 有序…...

1077: 平衡二叉树的判定

解法: 平衡二叉树是一种特殊的二叉树,它满足以下两个条件: 左子树和右子树的高度差不超过1(即,左右子树高度差的绝对值不超过1)。左子树和右子树都是平衡二叉树。 后序遍历过程中每次判断左右子树高度差…...

深度学习-Softmax回归+损失函数+图像分类数据集

目录 Softmax回归回归 VS 分类Kaggle上的分类问题 从回归到多类分类回归分类从回归到多类分类-均方损失从回归到多类分类-无校验比例从回归到多类分类-校验比例 Softmax和交叉熵损失总结损失函数均方损失绝对值损失函数鲁棒损失 图像分类数据集通过框架中内置函数将FashionMNIS…...

【论文解读】Overview of the Scalable Video Coding Extension of the H.264/AVC Standard

介绍 该篇论文是一篇关于H.264/AVC标准可扩展视频编码(SVC)扩展的综述论文,由Heiko Schwarz、Detlev Marpe和Thomas Wiegand撰写,发表在《IEEE Transactions on Circuits and Systems for Video Technology》2007年9月第17卷第9期上。 论文解读 摘要: H.264/AVC视频编…...

【C语言】程序员自我修养之文件操作

【C语言】程序员自我修养之文件操作 🔥个人主页:大白的编程日记 🔥专栏:C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…...

一种获取java代码结构的实现思路

一种获取java代码结构的实现思路 有时,我们需要获取java文件里的代码结构,即,只需要里面的class定义、方法声明、属性定义。不需要额外的方法实现 这里提供一下实现思路: 采用语法解析器Tree-sitter对java代码进行解析,获取里面的方法实现遍历第一步获取到的方法列表,在源…...

MySQL---增删改查

MySQL是一个流行的关系型数据库管理系统,它使用结构化查询语言(SQL)来管理数据库中的数据。以下是MySQL中增删改查(CRUD)操作的基本命令: 创建(Create): 创建新表:CREATE TABLE table_name (column1 datatype,column2 datatype,...PRIMARY KEY (column) );插入数据:…...

C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作

在C#编程中,对象之间的属性复制和操作是一个常见的需求。为此,.NET Framework提供了多种实用工具库,如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码,提高了开发效率。本文将介绍这些工具库,比较它们…...

爬虫基本原理及requests库用法

文章目录 一、爬虫基本原理1、什么是爬虫2、爬虫的分类3、网址的构成4、爬虫的基本步骤5、动态【异步】页面和静态【同步】页面6、请求头 二、requests基本原理及使用1、chrome 抓包按钮详解1.1 Elements1.2 元素定位器1.3 Network1.4 All1.5 XHR1.6 Preserve log1.7 手机模式1…...

spring和springboot、springcloud版本关系

进入新公司,看底层框架代码时,想了解spring的版本,很好奇这些版本之间时怎么对应的,因为不同版本应该有依赖关系,用得不对可能代码会有隐藏问题。 Spring、SpringBoot和SpringCloud的版本不一致,并且需要搭…...

视频监控汇聚平台LntonCVS通过GB/T28181国标协议实现视频监控平台的级联方案

近年来,随着网络视频监控应用范围的拓展,越来越多的政府部门和跨区域行业单位对视频监控的需求已经不局限于本地联网监控。他们正在探索在原有的本地联网监控基础上,建设省级乃至全国范围内的跨区域监控联网,以全面打造数据共享平…...

【精品】使用 v-md-editor 上传图片

简介 v-md-editor 是基于 Vue 开发的 markdown 编辑器组件,即支持vue2也支持vue3。 gitee:https://gitee.com/ckang1229/vue-markdown-editor文档:https://code-farmer-i.github.io/vue-markdown-editor/zh/ 服务器端代码 RestController…...

STM32——DAC篇(基于f103)

技术笔记! 一、DAC简介(了解) 1.1 DAC概念 传感器信号采集改变电信号,通过ADC转换成单片机可以处理的数字信号,处理后,通过DAC转换成电信号,进而实现对系统的控制。 1.2 DAC的特性参数 1.3…...

突然提示由于找不到msvcr120.dll,无法继续执行代码有什么办法可以解决?

msvcr120.dll是Microsoft Visual C 2013 Redistributable Package的一部分,它包含了运行时库,用于支持使用Visual C 2013开发的应用程序。如果电脑突然提示由于找不到msvcr120.dll,无法继续执行代码有什么办法可以解决?以下是关于msvcr120.dl…...

swig4.2.1压缩包中里面没有找到swig.exe

官网:Simplified Wrapper and Interface Generator C转 C# 采用Swig.exe 打开Example示例的解决方案:sln 生成 即可查看如何调用和使用.i文件 但是:迅雷不管下载哪个版本都是没有exe 官网说了自带。很迷很迷~ 下载其他版本的时候发现&…...

Vue文本溢出如何自动换行

css新增 word-break: break-all; word-wrap: break-word;...

【系统架构师】-论文-系统安全性与保密性设计

1、摘要: 2018 年初,我所在的公司为一票务公司开发开票业务平台的建设。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以采用 B/S 架构服务用户,采用”平台应用”的模式解决现有应用单机独立开票的模…...

Cisco Catalyst 9000 9200 9300 9400 IOS software upgrade

1 背景 从Catalyst 3650 ,3850,Catalyst 9000开始, 更准确的说是IOS XE的交换机的系统镜像安装方式分为2种  Bundle mode  Install mode 这2种方工啥区别? Bundle mode 传统方式利用boot system flash:c9k.xx16.bin方式引导 Install mode 将bin文…...

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回&#xff0c…...