我有一个输入流,每隔几秒就获取一个字节数组。我知道字节数组总是按顺序包含一个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