- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Java 单元测试中遇到了一个大问题。我将字节数组与 InputStream 进行比较,但没有得到相同的结果。
例子如下。
public final class ByteGetInputStreamExampleProblem
{
public static void main( final String[] args ) throws Exception
{
final SecureRandom s = new SecureRandom() ;
final ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
long bPut = 0 ;
final byte[] buffer = new byte[ 2 ] ;
while( bPut < 10 )
{
s.nextBytes( buffer ) ;
bos.write( buffer ) ;
bPut += buffer.length ;
}
final InputStream is = new ByteArrayInputStream( bos.toByteArray() ) ;
System.out.print("A = ");
for( int i = 0 ; i < bos.size() ; i++ )
System.out.print( bos.toByteArray()[i] + ";" ) ;
System.out.print("\nB = ");
int c ;
while( ( c = is.read() ) != -1 )
System.out.print(c + ":");
} ;
} ;
输出:
A = -3;-47;-121;37;-73;83;109;-54;20;106;
B = 253:209:135:37:183:83:109:202:20:106:
最佳答案
当您打印 A 的内容时,您将它们打印为字节。因此它将打印 Byte.MIN_VALUE
到 Byte.MAX_VALUE
之间的值(-128
到 127
)。
当您使用 is.read()
时,您读取的内容是作为 int
传递给您的无符号数字。此值介于 0
和 255
之间。
您可以通过将 c
转换为一个字节来获得相同的输出,例如
while( ( c = is.read() ) != -1 ){
byte b = (byte)c;
System.out.print(b + ":");
}
本质上,您需要将两个数字转换为 0
和 255
之间或 -128
和 127
.
您可以将 0
到 255
范围转换为 -128
到 127
,方法是将其转换为字节。
您可以通过执行 value & 0xFF
将 -128
转换为 127
。这会将其更改为在 0
-255
范围内。
ByteArrayInputStream
中read()
的代码如下:
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
关于java - 为什么 ByteArrayOutputStream 和 ByteArrayInputStream 的内容不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092891/
关于 ByteArrayInputStream 的文档说: java.io.ByteArrayInputStream.ByteArrayInputStream(byte[] buf) Creates
我想知道是否是 ByteArrayInputStream java.io 包中的类好用吗?或者,如果要通过使用字节数组将其与自己的类进行比较,例如: private int pos = 0; priv
使用 ByteArrayInputStream 和/或 ByteArrayOutputStream 的一些实际领域是什么?也欢迎提供示例。 如果搜索示例,通常会找到如下内容: byte[] buf =
我正在研究流媒体网络摄像头。 现在我可以进行 1:1 TCP 网络摄像头通信。 问题是即使 gc 运行,堆内存也不会减少。 我尝试了重置(),刷新(),关闭()。 一切看起来都很好,但 new Byt
我有方法返回将显示为文本字符串的值。所以我正在做的是转换为 ByteArrayInputStream。 public String method() { inputStream = new B
假设一个函数如下: InputStream func() { byte[] buffer = new byte[] {0,1,2,3}; return
我只是想弄清楚 ByteArrayInputStream 中的字节类型。在一种情况下,我存储一个byte[],在另一种情况下,我存储一个Hashmap。以下代码仅在 byte[] 的情况下在 Obje
java.io 类太多了,对于其中一些我真的不明白什么时候需要它们,例如: 字节数组输入流、字节数组输出流 序列输入流, PushbackInputStream、PushbackReader 字符串读
基本上我使用(在groovy中)以下结构: InputStream in = new ByteArrayInputStream("one two three four".getBytes()); 但是
我将使用 Jsch ssh 到另一台服务器 并检查路径是否存在 但是我发现baos.toString() 将在终端上打印出所有结果: test -d /root/bin/python || echo
我正在使用一个 ByteArrayInputStream,它包含一个 XML 文档,该文档由一个元素组成,元素的内容是一个大的 base 64 编码字符串。我需要删除周围的标签,以便解码文本并将其输出
首先,在下面的代码中,我试图做的是使用“byteBuffer[0].length”找到二维字节数组的长度,但它实际上不起作用。当我打印 'byteBuffer[0].length' 时,它给出的输出为
我正在尝试通过 telnet 与 Windows 服务器中的应用程序进行交互,因此我使用的是 TelnetClient() 方法。我可以使用 System.in.read() 进行交互(发送命令和检索
我有一个 JPA AttributeConverter,用于将 String 转换为 gzipped byte[] 并返回。 转换方法相当简单: public byte[] convertToData
我正在尝试以 blob 数据格式 ([B@e96bf) 加载 MySQL 数据库中的图像,但无法将其加载到 JLabel,如下所示。它显示 ByteArrayInputStream 为空。 byte[
我想从 ByteArrayInputStream 获取内部字节数组。我不想扩展该类或将其写入另一个字节数组。有实用程序类可以帮助我做到这一点吗? 谢谢, 最佳答案 您无法访问相同的字节数组,但您可以轻
我在测试中遇到了这段代码。 byte[] bytes = new byte[] { -1, 1, 0x0 }; InputStream in = new ByteArrayInputStream(by
以下是在处理文件之前将整个文件读入内存的三种方法: 方法一: fis = new FileInputStream(file); bis = new BufferedInputStream(fis);
我有一个 ByteArrayInputStream 形式的图像。我想把它做成我可以保存到我的文件系统中某个位置的东西。 我一直在兜圈子,你能不能帮帮我。 最佳答案 如果您已经在使用 Apache co
我读过 this post但我不关注。我看过this但还没有看到使用 ByteArrayOutputStream 将 ByteArrayInputStream 转换为 String 的正确示例。 要将
我是一名优秀的程序员,十分优秀!