- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是演示该问题的示例代码。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
CodedOutputStream cos = CodedOutputStream.newInstance(bos);
cos.writeRawVarint64(25);
cos.flush();
bos.write("something else".getBytes());
System.out.println("size(bos) = " + bos.size()); // This gives 15
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
CodedInputStream cis = CodedInputStream.newInstance(bis);
System.out.println("size(bis) = " + bis.available()); // This gives 15
long l = cis.readRawVarint64();
System.out.println(cis.getTotalBytesRead()); // This gives 1, which is correct
System.out.println("Raw varint64 = " + l); // This gives 25, which is correct
System.out.println("size(bis) = " + bis.available()); // This now gives 0!!
我想做的就是编码 64 位整数并向有效负载添加更多数据。我可以正确读取编码数据。但由于某种原因,它会在那之后清除底层流。有谁知道为什么会发生这种情况?如何从流中读取 varint
并读取 varint
指示的剩余字节?
任何帮助都会很棒
最佳答案
我不知道 codedinputstream 的作用,但它可以很好地缓冲输入,这意味着它读取的内容例如一次 100 字节。
无论哪种方式,您都不应该将输入流 B 包裹在输入流 A 周围并继续从 A 读取数据,因为您不知道 B 做了什么。
例如,B 可能必须提前查看数据才能得出某些结论,或者它使用缓冲或...
附加说明:available() 通常是一个坏主意,尽管它应该在 bytearrayinputstream 上正确工作。
编辑:
结论:只需继续从编码输入流中读取,不要尝试从底层读取。
关于java - 为什么 CodedInputStream.readRawVarint64() 正在从底层流中读取所有字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21772177/
我有一些按钮总是 float 在浏览器窗口的底 Angular 。 后退 按钮位于正确的位置,但下一步 按钮不会正确 float 。 #footerback { width: 107px;
有谁知道如何在传统 java 中使用此公式计算三角形的面积而不更改或添加公式中的任何内容? 面积 = 1/2*底*高 如果我像这样修改公式: 面积=1.0f/2*baseheigh 或 1/2.0fb
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SS
我正在使用 jQuery mobile 并有一个 div,我只希望底部的 2 个 Angular 具有 flex 的外观。 根据我的阅读,我明白我应该使用: ui-corner-bl 和 ui-cor
我是一名优秀的程序员,十分优秀!