java.io.ByteArrayOutputStream.toByteArray()是否会返回null?

java.io.ByteArrayOutputStream.toByteArray()是否会返回null?,java,null,bytearrayoutputstream,Java,Null,Bytearrayoutputstream,正如标题所示,我在Javadoc中找不到任何关于它的线索。不,永远不会。返回null是没有意义的,如果您查看实现,它肯定不会有意义。(我意识到依赖文档化的保证通常比依赖实现要好,但我认为没有理由认为它会在这里返回null。) 特别是,各国: 创建新分配的字节数组 及 返回:此输出流的当前内容,作为字节数组 如果它返回空值,这些就不正确了,是吗?不,永远不会。返回null是没有意义的,如果您查看实现,它肯定不会有意义。(我意识到依赖文档化的保证通常比依赖实现要好,但我认为没有理由认为它会在这里返回

正如标题所示,我在Javadoc中找不到任何关于它的线索。

不,永远不会。返回null是没有意义的,如果您查看实现,它肯定不会有意义。(我意识到依赖文档化的保证通常比依赖实现要好,但我认为没有理由认为它会在这里返回null。)

特别是,各国:

创建新分配的字节数组

返回:此输出流的当前内容,作为字节数组


如果它返回空值,这些就不正确了,是吗?

不,永远不会。返回null是没有意义的,如果您查看实现,它肯定不会有意义。(我意识到依赖文档化的保证通常比依赖实现要好,但我认为没有理由认为它会在这里返回null。)

特别是,各国:

创建新分配的字节数组

返回:此输出流的当前内容,作为字节数组


如果它返回null,这些就不正确了,是吗?

它会以某种方式返回
null

输出:

null

它将以一种方式返回
null

输出:

null

不,不会的。曾经通过tearrayoutputstream.toByteArray查看代码:

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}
Arrays.copyOf:

public static byte[] copyOf(byte[] original, int newLength) {
    byte[] copy = new byte[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}

不,不会的。曾经通过tearrayoutputstream.toByteArray查看代码:

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}
Arrays.copyOf:

public static byte[] copyOf(byte[] original, int newLength) {
    byte[] copy = new byte[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}

我非常期待JDK中的
@Nullable
@NotNullable
注释…JavaDoc和Sun的JDK中的源代码都很清楚-这永远不会发生。“我在JavaDoc中找不到任何关于它的线索”线索是JavaDoc没有说它将返回
null
。因此,它不会。@t.J.Crowder嗯,这不是我会依赖的。@Thilo:如果一个方法返回
null
,而没有将其记录为返回值,那就是一个bug(在方法或Javadoc中)。如果你发现有人(包括Sun/Oracle)在做这件事,向他们报告所说的错误。:-)我非常期待JDK中的
@Nullable
@NotNullable
注释…JavaDoc和Sun的JDK中的源代码都很清楚-这永远不会发生。“我在JavaDoc中找不到任何关于它的线索”线索是JavaDoc没有说它将返回
null
。因此,它不会。@t.J.Crowder嗯,这不是我会依赖的。@Thilo:如果一个方法返回
null
,而没有将其记录为返回值,那就是一个bug(在方法或Javadoc中)。如果你发现有人(包括Sun/Oracle)在做这件事,向他们报告所说的错误。:-)是的,但在这一点上,它没有遵守Javadoc中的契约,是吗?@JonSkeet您是对的,但它至少可以在结尾处返回
null
),这不是一个
ByteArrayOutputStream
。它是派生类的
ByteArrayOutputStream
接口(正如Jon指出的,它违反了其父类的约定),但实际上它不是java.io.ByteArrayOutputStream.toByteArray()是的,但在这一点上,它没有遵守Javadoc中的契约,是吗?@JonSkeet您是对的,但它至少可以在结尾处返回
null
),这不是一个
ByteArrayOutputStream
。它是派生类的
ByteArrayOutputStream
接口(正如Jon指出的,它违反了其父类的约定),但实际上它不是java.io.ByteArrayOutputStream.toByteArray()