2012-04-09 17 views
0

タイトルのショーと同じように、私はJavadocでそれについて何か手がかりを見つけることができませんでした。java.io.ByteArrayOutputStream.toByteArray()はnullを返しますか?

+1

私はそうNullable'、 '@ @ JDK ... – Thilo

+0

で注釈NotNullable''を楽しみにしていますどちらもJavaDocとSunのJDKのソースは明らかです。これは決して起こりません。 –

+1

* "Javadocでそれについて何か手がかりが見つかりませんでした" * Javadoc **は 'null 'を返すとは言わないということです。したがって、そうではありません。 –

答えて

4

いいえ、決してありません。 の意味がになることはありません。実装を見ると、間違いなくnullになります。 (私はそれが実装よりも文書化の保証に依存することが一般的に良いでしょう実現が、私はそれが今までここにnullを返しますと仮定する理由を見ていない。)特に

documentation状態:

を作成します。新しく割り当てられたバイト配列。

戻り値:この出力ストリームの現在の内容、バイト配列として。

nullを返した場合、それらは正しくありませんか?

+0

もちろん、これは正しい解決策です+1 –

0

それは一方通行でnullを返します;)

ByteArrayOutputStream baos = new ByteArrayOutputStream() 
{ 
    public byte[] toByteArray() 
    { 
     return null; 
    } 
}; 
System.out.println(baos.toByteArray()); 

OUTPUT:

null 
+1

はい、その時点でJavadocの契約に従わないのですか? –

+0

@ JonSkeetあなたは正しいですが、少なくともそれは最後に 'null'を返すことができます:) –

+1

これは' ByteArrayOutputStream'ではありません。これは、*派生クラスへの 'ByteArrayOutputStream'インターフェースです(そして、Jonが指摘しているように、親の契約に違反しています)。 –

0

ありません、それはないだろう。これまでコードByteArrayOutputStream.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; 
} 
関連する問題