首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Java11将写字节(byte[] b)方法添加到ByteArrayOutputStream类中,而写​(byte[] b)方法也是这样做的?

为什么Java11将写字节(byte[] b)方法添加到ByteArrayOutputStream类中,而写​(byte[] b)方法也是这样做的?
EN

Stack Overflow用户
提问于 2022-06-16 00:19:12
回答 2查看 256关注 0票数 1

自Java11以来,甲骨文将writeBytes​(byte[] b)方法添加到ByteArrayOutputStream类中。该方法接受一个字节数组并将其写入ByteArrayOutputStream。然而,ByteArrayOutputStream扩展了定义write​(byte[] b)OutputStream类来做同样的事情。为什么Java需要一个新的方法来做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2022-06-16 00:45:32

ByteArrayOutputStream.writeBytes不会抛出不必要的IOException

这是一个特定于字节数组输出流的新方法,而其他选项则继承自OutputStream,并声明为抛出检查的IOException (如果您知道要写入字节数组输出流,则这是不必要的痛苦--您没有网络连接可以失败或类似)

票数 1
EN

Stack Overflow用户

发布于 2022-06-16 00:19:12

这两种方法都将字节写入输出流。为了比较它们,我们首先应该看看它们的源代码:

一方面,在OutputStream类中,我们有以下3种嵌套方法来编写字节:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public void write(byte b[]) throws IOException {
       write(b, 0, b.length);
  }

  public void write(byte b[], int off, int len) throws IOException {
     Objects.checkFromIndexSize(off, len, b.length);
     for (int i = 0 ; i < len ; i++) {
         write(b[off + i]);
     }
  }
  public abstract void write(int b) throws IOException;

所有上述方法都抛出IOException。

另一方面,writesByte方法的ByteArrayOutputStream调用此方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void writeBytes(byte b[]) {
     write(b, 0, b.length);
}
public synchronized void write(byte b[], int off, int len) {
    Objects.checkFromIndexSize(off, len, b.length);
    ensureCapacity(count + len);
    System.arraycopy(b, off, buf, count, len);
    count += len;
}

这些方法在编写字节之前检查字节数组的容量,因此它们摆脱了IOException。而且,写入方法是安全的,因为它是同步的方法。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72642616

复制
相关文章
Python如何将byte(b”)字符串正常打印
这种事情在python2上很少遇到,但是python3就会遇到,很多时候是因为python修改编码,增强了兼容性的缘故。
用户2353021
2020/05/12
3.5K0
你也是这样写代码的吗?
想要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取  架构群:835544715
JAVA高级架构开发
2018/10/10
5390
你也是这样写代码的吗?
String中new String(byte[] b, int n, int m)的理解
String item = new String(b, n, m)的用法,其中b为byte[]数组,n,m为int类型. 简单的来说就是byte数组b从下标为n开始前进m个下标的那一段数组变为字符串item。概念比较难理解,下面直接看例子吧! 例如1:              b={'1' ,'2', '3', '4', '5', '6', '7', '8'};           String item=new String(b,2,2)           结果 item=34 例如2:            String item=new String(b,0,3)           结果 item=123 看例子可以很清楚的看到new String(byte[] b, int n, int m)中个参数的作用。这种情况一般出现在要对byte进行处理的情况。 例如Android中加密和解密的过程就会用到这种情况。
林老师带你学编程
2022/11/30
5220
C#中byte[]字节数组复制的5种常用方法
在CLR处理机制中最灵活,最强大,可装箱,拆箱复制,可加宽CLR基元类型,可内部判断实现了IFarmattable接口的兼容转换,当然这种强大方式必然会带来一定的性能损失。还有个CopyTo也是一样的。
郑子铭
2023/08/30
1.1K0
C#中byte[]字节数组复制的5种常用方法
java学习之路:18.掌握Byte对象的创建以及Byte类提供的各种方法
Byte(byte value) 该方法创建的Byte对象,可表示指定的byte的值。
花狗Fdog
2020/10/28
1.7K0
字节、字、bit、byte的关系
字 word 字节 byte 位 bit,来自英文bit,音译为“比特”,表示二进制位。 字长是指字的长度
全栈程序员站长
2022/09/01
2.9K0
2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;
2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;D:[]uin8{} []uint8。
福大大架构师每日一题
2022/07/30
3940
2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;
java字节码byte code简介
Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译成为字节码,而字节码又被加载进JVM中运行。字节码怎么生成,怎么查看字节码,隐藏在Byte Code背后的秘密是什么呢?快跟小师妹一起来看看吧。
程序那些事
2020/07/07
1.4K0
Java 字节流操作
本文介绍了Java中的IO流体系,包括字节流和字符流,以及基于缓冲区的IO流,并举例了常用的IO流类及其用法。
Single
2018/01/04
1.3K0
Java 字节流操作
C# 从 short 转 byte 方法
通过BitConverter 可以将大量的类转换为 byte 包括 short 的方法
林德熙
2022/08/04
9130
bit、byte、位、字节、汉字的关系
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间. 符号:英文标点2占一个字节,中文标点占两个字节.
全栈程序员站长
2022/11/17
1.9K0
写这样的方法让人很反感
写作文要做到段落清晰、每段思路流畅、每段主旨明确,要有一条清晰的线穿插整篇内容,编写程序代码和写作文是一个套路。一个类就像一篇小作文,类的单一职责就是小作文要叙述的主旨,类的方法就是小作文的段落,类的方法组合在一起就是小作文的整篇内容。类的方法要像文章的段落一样,有主旨,即只做一件事;思路清晰,即先做什么、后做什么。方法没写好就像作文的段落没写好一样,会让人有一种“写的都是啥”的反感。下面出现的方法,会让阅读代码的人很反感。 太随意的方法名 getAbc()。get是得到、抓住的意思,getAbc是想表达获
JavaQ
2018/04/04
7370
(57) 二进制文件和字节流 / 计算机程序的思维逻辑
查看历史文章,请点击上方链接关注公众号。 本节我们介绍在Java中如何以二进制字节的方式来处理文件,上节我们提到Java中有流的概念,以二进制方式读写的主要流有: InputStream/OutputStream: 这是基类,它们是抽象类。 FileInputStream/FileOutputStream: 输入源和输出目标是文件的流。 ByteArrayInputStream/ByteArrayOutputStream: 输入源和输出目标是字节数组的流。 DataInputStream/DataOutpu
swiftma
2018/01/31
1.4K0
字节、字、bit、byte的关系「建议收藏」
字 word 字节 byte 位 bit 字长是指字的长度
全栈程序员站长
2022/09/20
1.7K0
Java 的字节流文件读取(一)
上篇文章我们介绍了抽象化磁盘文件的 File 类型,它仅仅用于抽象化描述一个磁盘文件或目录,却不具备访问和修改一个文件内容的能力。 Java 的 IO 流就是用于读写文件内容的一种设计,它能完成将磁盘文件内容输出到内存或者是将内存数据输出到磁盘文件的数据传输工作。 Java IO 流的设计并不是完美的,设计了大量的类,增加了我们对于 IO 流的理解,但无外乎为两大类,一类是针对二进制文件的字节流,另一类是针对文本文件的字符流。而本篇我们就先来学习有关字节流的相关类型的原理以及使用场景等细节,主要涉及的具体流
Single
2018/05/28
1.6K0
PHP实现字节数Byte转换为KB、MB、GB、TB的方法
本文实例讲述了PHP实现字节数Byte转换为KB、MB、GB、TB的方法。分享给大家供大家参考,具体如下: 前面介绍了java实现字节数Byte转换为KB、MB、GB、TB的方法 ,这里改用PHP实现这一功能。代码非常简单:
用户2323866
2021/07/05
9780
为什么MySQL InnoDB 存储引擎要用B+树做索引,而不用B树?
一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。而因为B+树的内部节点只是作为索引使用,而不像B树那样每个节点都需要存储硬盘指针。也就是说:B+树中每个非叶节点没有指向某个关键字具体信息的指针,所以每一个节点可以存放更多的关键字数量,即一次性读入内存所需要查找的关键字也就越多,减少了I/O操作。
一个会写诗的程序员
2021/03/04
5.7K1
pentaho中Invalid byte
上网一查,说是有中文,字体不相符,可是我没有写中文,为了能继续往后进行,修改了如下文件
py3study
2020/01/07
6120
为什么覆写equals方法时一定要覆写hashCode方法?
在学习Java基础的时候,相信大家都应该学到过覆写equals方法的时候必须覆写hashCode方法,但是为什么要这么做呢?
小诸葛
2020/04/14
7000
Java的字节(byte)数组与Python3中的字节类型负值问题
在Java中,字节数组可以存放负值,这是因为Java的byte类型的取值范围为-128到127之间,而在Python3中,bytes的取值范围为0到256。
程序新视界
2023/04/12
1.4K0

相似问题

将byte[]从方法A转到方法B

32

有更好的方法写A>b吗?A:B

23

为什么OutputStream的写(Int b)方法存在?

35

写(byte[],int,int)方法是如何工作的?

22

为什么byte[] b=新的byte[8]();不工作?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文