java 字节流和字符流的区别

CentOS7下Node.js v20+安装与常见依赖库问题解决指南 本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。 阅读详情

字节流在操作时本身不会用到缓冲区(内存)
字符流在操作时使用了缓冲区,通过缓冲区再操作文件

如图所示
这里写图片描述

操作上的差异(写操作)

范例:使用字节流不关闭执行

package demo1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamDemo01 {
    public static void main(String[] args) throws Exception { // 异常抛出, 不处理
        // 第1步:使用File类找到一个文件
        File f = new File("f:" + File.separator + "testDemo.txt"); // 声明File 对象
        // 第2步:通过子类实例化父类对象
        OutputStream out = null;
        // 准备好一个输出的对象
        out = new FileOutputStream(f);
        // 通过对象多态性进行实例化
        // 第3步:进行写操作
        String str = "Hello World!!!";
        // 准备一个字符串
        byte b[] = str.getBytes();
        // 字符串转byte数组
        out.write(b);
        // 将内容输出
        // 第4步:关闭输出流
        // out.close();
        // 此时没有关闭
    }
}

运行结果:
这里写图片描述

范例:使用字符流不关闭执行

package demo1;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo02 {
    public static void main(String[] args) throws Exception { // 异常抛出, 不处理
        // 第1步:使用File类找到一个文件
        File f = new File("f:" + File.separator + "testDemo.txt");// 声明File 对象
        // 第2步:通过子类实例化父类对象
        Writer out = null;
        // 准备好一个输出的对象
        out = new FileWriter(f);
        // 通过对象多态性进行实例化
        // 第3步:进行写操作
        String str = "Hello World!!!";
        // 准备一个字符串
        out.write(str);
        // 将内容输出
        // 第4步:关闭输出流
        // out.close();
        // 此时没有关闭
    }
}

运行结果
这里写图片描述

结论:
程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。

提问:什么叫缓冲区?
在很多地方都碰到缓冲区这个名词,那么到底什么是缓冲区?又有什么作用呢?
回答:缓冲区可以简单地理解为一段内存区域。
可以简单地把缓冲区理解为一段特殊的内存。
某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

范例:强制性清空缓冲区

package demo1;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo03 {
    public static void main(String[] args) throws Exception { // 异常抛出, 不处理
        // 第1步:使用File类找到一个文件
        File f = new File("f:" + File.separator + "testDemo.txt");// 声明File 对象
        // 第2步:通过子类实例化父类对象
        Writer out = null;
        // 准备好一个输出的对象
        out = new FileWriter(f);
        // 通过对象多态性进行实例化
        // 第3步:进行写操作
        String str = "Hello World!!!";
        // 准备一个字符串
        out.write(str);
        // 将内容输出
        // 强制性清空缓冲区中的内容
        out.flush(); 
        // 第4步:关闭输出流
        // out.close();
        // 此时没有关闭
    }
}

运行结果:

这里写图片描述

提问:使用字节流好还是字符流好?
学习完字节流和字符流的基本操作后,已经大概地明白了操作流程的各个区别,那么在开发中是使用字节流好还是字符流好呢?
回答:使用字节流更好。
在回答之前,先为读者讲解这样的一个概念,所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
字节流与字符流主要的区别是他们的的处理方式
流分类:
1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流 Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。 InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new

字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的
在从字节流转化为字符流时,实际上就是byte[]转化为String时, public String(byte bytes[], String charsetName) 有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang 而在字符流转化为字节流时,实际上是String转化为byte[]时, byte[] String.getBytes(String charsetName) 也是一样的道理
至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便, 如BufferedInputStream,PipedInputStream等

学习海康VisionMaster之顶点检测 2:应用场景:海康VisionMaster的顶点检测功能在工业视觉检测中具有广泛的应用场景,尤其在精密制造、电子元件检测和机械加工等领域,其通过高精度定位物体的关键点(如角点、交点或边缘顶点)来实现自动化测量与质量控制。基本参数这里就是画ROI,设定跟踪参数和之前的工具是一样的方法,这里画的方向需要注意,如下图所示,边缘的扫描方向正好对应需要查找的边缘点。一个不是很规则的物体需要检测一个凸台的顶角坐标,其实靠边缘与边缘交点是不太稳定的,如下图所示,边缘很短,很容易产生误抓边缘。1:什么是顶点检测? 阅读详情

相关推荐

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

字节流与字符流的区别

一、两者的组成不同: 1、字节流的组成:字节流是由字节组成的。 2、字符流的组成:字符流是由字符组成的。 二、两者的处理不同: 1、字节流的处理:主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本。 2、字符流的处理:按虚拟机的encode来处理,也就是要进行字符集的转化。 字节流是由字节组成的; 字符流是由字符组成的 Java里字符由两个字节组成. 1字符=2字节 JAVA中的字节流是采用ASCII编码的, 字符流是采用好似UTF编码,支持中文的 字节流与字符流主要的区别是他们的的处理方式

biiiioo的博客 2万+

SAP公司间外协业务流程以及配置说明

SAP公司间外协业务流程以及配置说明

竹大的博客 7168

字节流和字符流

字节流和字符流

weixin_42594143的博客 3451

实战STM32G0驱动DRV8870/AT8870:PWM+DMA精准调速与H桥衰减模式详解

本文详细介绍了如何使用STM32G0单片机结合DRV8870/AT8870电机驱动芯片实现直流有刷电机的精准控制。重点讲解了PWM与DMA结合实现高效调速的硬件配置与软件驱动方法,并深入剖析了H桥快衰减与慢衰减模式的工作原理及应用场景,为嵌入式电机控制项目提供了完整的实战解决方案。

c7d8e9的博客 595

大语言模型的三种主要架构 Decoder-Only、Encoder-Only、Encoder-Decoder

f基于 Transformer 模型以非灰色显示:decoder-only 模型在蓝色分支,encoder-only 模型在粉色分支,encoder-decoder 模型在绿色分支。模型在时间线上的垂直位置表示它们的发布日期。开源模型由实心方块表示,而闭源模型由空心方块表示。右下角的堆积条形图显示了各公司和机构的模型数量。从时间轴上,我们可以看到:2021年前,当 OpenAI 决定在,他们实际上是在逆流而上。

u010899985的博客 2万+

字符流与字节流的区别

字符流与字节流的区别

Aaaaaaaaaaaaaaai的博客 4269

Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

IAYLBL的博客 696

字符流和字节流的区别

字符流和字节流的区别 字符流和字节流的区别: 1、读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。 2、处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 3、处理方式不同:   Java的字节流       InputStream是所有字节输入流的...

weixin_42981419的博客 1759

7段数码管驱动电路设计

7段数码管驱动电路设计

好好学习,天天向上 9754

HTML炫酷烟花④(完整代码)

HTML语言实现炫酷烟花的完整代码。

AIGC 9万+

字节流和字符流的区别是什么?

字节流和字符流是Java中用于处理输入输出(I/O)操作的两种主要流类型。它们的主要区别在于处理数据的单位、适用场景以及性能特点。

破损的天堂鸟博客 1009

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 292

Java 字节流与字符流的区别详解

原文地址:https://www.cnblogs.com/DONGb/p/7844123.html 1. 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 2. 字节流与字符流 在java.io包中操作文件内...

学习笔记 1万+

数学建模模型总结

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java 字节流与字符流的区别

字节流是通用的,可以处理所有类型的数据,尤其是二进制数据。字符流主要用于文本数据,它会自动处理字符编码,简化了字符数据的读取和写入。根据实际情况选择合适的流类型,可以帮助你更高效地进行 I/O 操作。

heromps的博客 1077

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

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

java中字符流和字节流的区别_java中字节流和字符流有哪些区别

java中字节流和字符流的区别有:1、定义不同;2、结尾不同;3、处理方式不同;4、缓冲区不同;5、编码方式不同。字节流默认不使用缓冲区,而字符流使用缓冲区。字节流采用ASCII编码,字符流采用unicode编码。流是一系列随时间而可用的数据;源将数据生成为流,目标消耗或读取数据可用作流。换句话说,流解释了允许读或写的数据流。在Java中执行流操作的两种方式是使用字节流和字符流。下面我们就来简单了...

weixin_42699679的博客 6436

STM32F407中文手册

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

Java中字符流和字节流的区别

在 Java 的 I/O 体系中,字节流和字符流都配备了缓冲机制的实现类,以此显著提升数据读写的效率。在 Java 编程实践中,最佳实践是:使用字符流读取文本文件,使用字节流读取非文本文件。

2202_75481735的博客 1215

java中字符流与字节流的区别

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.    所有文件的储存是都是字节(byte)的储存,在磁盘上保

Ada168855的专栏 808

java字符流和字节流的区别_java字符流与字节流的区别是什么

java中字符流与字节流的区别:1、字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。2、字节流默认不使用缓冲区;字符流使用缓冲区。3、字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。字节流Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。...

weixin_42500130的博客 1060

Java IO 字节流与字符流的区别

在 Java 编程中,IO 流是进行输入输出操作的重要工具,而字节流和字符流是 IO 流的两大核心分支。它们在数据处理方式、适用场景等方面存在诸多区别,下面将详细介绍。

2401_84552999的博客 1291

java学习之字符流和字节流的区别

一、字节输出流OutputStream OutputStream是抽象类,是表示输出字节流的所有超类,操作的数据都是字节,定义了字节输出流的基本共性和方法。OutputStream有大量子类,具体请看javaAPI文档,比较常用的是FileOutputStream 即:将数据写入到File的输出流。 注意:其中的方法close()方法和Flush()方法的不同,close()自带flush(...

公子&小白的博客 4412

java i o中字符流和字节流的区别_java中字节流与字符流的区别

字节流在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流。一、InputStream中的读取数据的方法如下:1、int read()功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾。2、int read(byte[] ...

weixin_42366447的博客 738

java字符流与字节流_Java中字符流与字节流的区别

1. 什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。2. 字节流Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStrea...

weixin_30064143的博客 288

java中字符流 字节流_理解Java中字符流与字节流的区别

1. 什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。2. 字节流Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStrea...

weixin_39746229的博客 87

java 字符流与字节流区别_JAVA 字符流与字节流的区别

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter...

weixin_32147807的博客 771

java中字节流与字符流的区别

1.概念 1.Java中的流是对字节序列的抽象,对于数据的输入/输出操作都是以“流”的方式进行。 2.流具有方向性的,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,则为输出流,反之称为输入流。 2.分类 可以从不同的角度对流进行分类: 1.处理的数据单位不同,可分为:字符流,字节流 2.数据流方向不同,可分为:输入流,输出流 3.功能不同,可分为:节点流,处理流 本次主要是理解字符流和字节流的概念和区别 3.字符流和字节流的概念 1.字符流 基本单位为字节,也就是8

weixin_46591962的博客 751
上一篇: IntelliJ 运行程序前设置运行参数
下一篇: spark-2.1.0集群搭建
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值