我有一個輸入流,每隔幾秒就獲取一個字節數組。我知道字節數組總是按順序包含一個long,一個double和一個整數。是否有可能通過輸入流(例如DataInputStream)讀取此值,或者您可以告訴我什麼?Java:輸入流與字節數組
回答
你應該考慮使用包裹字節緩衝區:
ByteBuffer buf=ByteBuffer.wrap(bytes)
long myLong=buf.readLong();
double myDbl=buf.readDouble();
int myInt=buf.readInt();
DataInputStream
會做得很好,雖然性能較差:
DataInputStream dis=new DataInputStream(new ByteArrayInputStream(bytes));
long myLong=dis.readLong();
double myDbl=dis.readDouble();
int myInt=dis.readInt();
要從其中任何一個獲取字符串,可以重複使用getChar()
。
假設buf
是你的ByteBuffer或DataInputStream類,請執行下列操作:
StringBuilder sb=new StringBuilder();
for(int i=0; i<numChars; i++){ //set numChars as needed
sb.append(buf.readChar());
}
String myString=sb.toString();
如果你想讀的,直到緩衝區的末尾,循環更改爲:
readLoop:while(true){
try{
sb.append(buf.readChar());
catch(BufferUnderflowException e){
break readLoop;
}
}
謝謝。當字節數組包含一個字符串。是否也可以用datainputstream讀取它? – Maxii
@Maxii是的,通過重複readChar()和StringBuilder的方式。如果您希望我可以將其添加到答案中。 – hexafraction
這將是不錯的 – Maxii
你可以看看java.nio.ByteBuffer
,它提供了getLong()
,getDouble()
和getInt()
的方法。
假設你總是20個字節(8字節長,8字節雙,4字節智力)得到了一個任意InputStream
:
int BUFSIZE = 20;
byte[] tmp = new byte[BUFSIZE];
while (true) {
int r = in.read(tmp);
if (r == -1) break;
}
ByteBuffer buffer = ByteBuffer.wrap(tmp);
long l = buffer.getLong();
double d = buffer.getDouble();
int i = buffer.getInt();
- 1. Scala:輸入流到數組[字節]
- 2. Java - 字節流與字符流?
- 3. 將我的字節數組讀入輸入流
- 4. Java字節數組輸出流給出什麼
- 5. 將內存流讀入字節數組
- 6. 將所有標準輸入讀入Java字節數組
- 7. 將輸入流轉換爲pdf到字節數組
- 8. 在xul插件中將字節數組轉換爲輸入流
- 9. 讀取字節數組與將字節數組寫入文件
- 10. 流PDF到字節數組
- 11. 流到字節數組
- 12. 音頻輸入捕捉 - 字節數組
- 13. java輸入流
- 14. 讀取線和字節[]從輸入流
- 15. 轉換字節到文件輸入流
- 16. Java - 字符和字節流
- 17. 如何將TCP輸入流轉換爲UPD數據報字節數組?
- 18. java socket輸入流
- 19. Java EE輸入/輸出流
- 20. java輸入輸出流
- 21. Java ProcessBuilder:輸入/輸出流
- 22. 輸入/輸出流Java Servlets
- 23. 將字節插入到字節數組
- 24. java中的字節數組
- 25. 位數組到字節 - java
- 26. C++和Java字節數組
- 27. Java短到字節數組
- 28. Java字節數組操作
- 29. 流數據轉化爲字節數組
- 30. 組合輸入流
可以使用'DataInputStream',就像你說的。你有什麼理由不去? – Joni
不,我不知道如何將bytearrayinputstream與正常輸入流組合起來 – Maxii