自Java11以来,甲骨文将writeBytes(byte[] b)
方法添加到ByteArrayOutputStream
类中。该方法接受一个字节数组并将其写入ByteArrayOutputStream
。然而,ByteArrayOutputStream
扩展了定义write(byte[] b)
的OutputStream
类来做同样的事情。为什么Java需要一个新的方法来做到这一点呢?
发布于 2022-06-16 00:45:32
ByteArrayOutputStream.writeBytes不会抛出不必要的IOException
。
这是一个特定于字节数组输出流的新方法,而其他选项则继承自OutputStream,并声明为抛出检查的IOException
(如果您知道要写入字节数组输出流,则这是不必要的痛苦--您没有网络连接可以失败或类似)
发布于 2022-06-16 00:19:12
这两种方法都将字节写入输出流。为了比较它们,我们首先应该看看它们的源代码:
一方面,在OutputStream类中,我们有以下3种嵌套方法来编写字节:
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调用此方法:
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。而且,写入方法是安全的,因为它是同步的方法。
https://stackoverflow.com/questions/72642616
复制相似问题