簡體   English   中英

在Android中擴展dataOuputStream

[英]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}放在哪里。

這里至少有三個獨立的問題。

  1. 您的[B@6a4fc1e是調用toString()的結果,這與輸出流不正確。
  2. IllegalStateException不是'格式錯誤的DataOutputStream的結果'。 這正是它所說的結果:您嘗試在建立連接后用未發布的代碼設置一個request屬性。
  3. 您無需在代碼中放入{@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM