2016-08-10 15 views
0

こんにちは私は、dataOutputStreamとしてrequestStreamとカスタムを使用しています。 拡張クラスを作成した直後に警告が表示されました。androidのdataOuputStreamを拡張する

public class RequestStream extends DataOutputStream{ 
/** 
* Constructs a new {@code DataOutputStream} on the {@code OutputStream} 
* {@code out}. Note that data written by this stream is not in a human 
* readable form but can be reconstructed by using a {@link DataInputStream} 
* on the resulting output. 
* 
* @param out the target stream for writing. 
*/ 

そして、私のすべての設定requestStreamは、完全な要求ペイロードである必要があり[[email protected]のようでした。 (上記の警告が言うように、それが読める人間ではなかった)

そして私は、私は

java.lang.IllegalStateException: Cannot set request property after connection is made

が、私はどこのコードで{@link DataInputStream}を配置するかを知りたい不正なDataOutputStreamのからの結果を推測する例外が発生しました。

答えて

1

少なくとも3つの異なる質問があります。あなたの[[email protected]

  1. は、出力ストリームに行うには正しいものではありませんこれは、toString()を呼び出した結果です。
  2. IllegalStateExceptionは '不正な形式の結果DataOutputStream'ではありません。それはまさにその結果です:あなたが投稿していないコードで、接続が行われた後にリクエストプロパティを設定しようとしました。
  3. {@link DataInputStream}をコードに入れないでください。あなたはそれをJavadocのコメントに入れます。あなたはすでに持っています。あなたが何を求めているのか不明です。

DataOutputStreamをここに延長する実際の理由はありません。

+0

ありがとうございました! 'RequestStream'はうまく動作しますが、Logcatで' ByteArray'を印刷しようとしましたが、それは問題でした。私は接続部分を固定しました。それはすべてうまくいく。ありがとうございました!私は、私がどんな誤りを抱えているかを知るためにより慎重かもしれない。 –

0

DataOutputStreamをめったに伸ばす必要はありません。通常、作成してデータを入れます。

OutputStream os = ...; 
DataOutputStream dos = new DataOutputStream(os); 
dos.writeUTF("The ultimate answer is: "); 
dos.writeInt(42); 

もう一方の側では、DataInputStreamを作成し、そこからデータを抽出します。

InputStream is = ...; 
DataInputStream dis = new DataInputStream(is); 
String message = dis.readUTF(); 
int answer = dis.readInt(); 

ザ・はRequestStreamクラスは、ストリームに、より複雑な構造を置くために、追加の「ヘルパー」メソッドを追加することも拡張します。この場合、SDKは複雑な構造を抽出するために対応するヘルパーを含む別のクラス(RequestInputStream extends DataInputStreamなど)を提供する必要があります。


注: [[email protected]「ではない人間が読める」要求ストリームの内容ではありません。 Object#toString()によって生成された「人間が判読可能な」Stringです。これは、オーバーライドされない限り、getClass().getName() + '@' + Integer.toHexString(hashCode())を返します。この場合、クラス名は[Bであり、byte[]の略であり、ハッシュコードは6a4fc1eです。要するに、あなたが見ているのは、バッファ自体のハンドルであり、バッファの内容ではありません。

+0

あなたの詳細が大好きです。私のコードで何が間違っていたのかを理解するのに本当に役立ちます。ありがとうございました ! –

関連する問題