![](/img/trans.png)
[英]Socket output stream with DataOuputStream - what are the guarantees?
[英]Extending dataOuputStream in android
嗨,我正在使用自定義dataOutputStream
作為android中的requestStream
。 創建擴展類后,我立即發現了警告。
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
就像[B@6a4fc1e
,應該是完整的請求有效負載。 (如上述警告說,這是不可讀的)
我有異常,我猜這是格式錯誤的dataOutputStream導致的
java.lang.IllegalStateException: Cannot set request property after connection is made
我想知道在代碼中將{@link DataInputStream}
放在哪里。
這里至少有三個獨立的問題。
[B@6a4fc1e
是調用toString()
的結果,這與輸出流不正確。 IllegalStateException
不是'格式錯誤的DataOutputStream
的結果'。 這正是它所說的結果:您嘗試在建立連接后用未發布的代碼設置一個request屬性。 {@link DataInputStream}
。 您將其放在Javadoc注釋中。 而且您已經擁有了。 不清楚你在問什么。 我沒有在這里擴展DataOutputStream
任何實際原因。
您很少需要擴展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
),其中包含相應的幫助程序以提取復雜的結構。
注意: [B@6a4fc1e
不是“不可讀的”請求流的內容; 它是Object#toString()
生成的“人類可讀” String
,除非重寫,否則將返回getClass().getName() + '@' + Integer.toHexString(hashCode())
。 在這種情況下,類名是[B
,它是byte[]
縮寫,而哈希碼是6a4fc1e
。 簡而言之,您看到的是緩沖區本身的句柄,而不是緩沖區的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.