Java 为什么ByteArrayOutputStream和ByteArrayOutputStream的内容不一样?
我在Java的一个单元测试中遇到了一个大问题。我将字节数组与InputStream进行比较,得到的结果不同 下面是一个例子Java 为什么ByteArrayOutputStream和ByteArrayOutputStream的内容不一样?,java,arrays,byte,inputstream,bytearrayoutputstream,Java,Arrays,Byte,Inputstream,Bytearrayoutputstream,我在Java的一个单元测试中遇到了一个大问题。我将字节数组与InputStream进行比较,得到的结果不同 下面是一个例子 public final class ByteGetInputStreamExampleProblem { public static void main( final String[] args ) throws Exception { final SecureRandom s = new SecureRandom() ;
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 + ":");
} ;
} ;
公共最终类ByteGetInputStreamExampleProblem
{
公共静态void main(最终字符串[]args)引发异常
{
最终SecureRandom s=新SecureRandom();
final ByteArrayOutputStream bos=新建ByteArrayOutputStream();
长bPut=0;
最终字节[]缓冲区=新字节[2];
而(bPut<10)
{
s、 下字节(缓冲区);
写入(缓冲区);
bPut+=缓冲区长度;
}
最终输入流是=newbytearrayinputstream(bos.toByteArray());
系统输出打印(“A=”);
对于(int i=0;i
输出: 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_值
到Byte.MAX_值
(-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
,方法是将其转换为一个字节
您可以通过执行值&0xFF
将-128
转换为127
。这会将其更改为在0
-255
范围内
ByteArrayInputStream
中的read()
代码如下:
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
public synchronized int read(){
返回(pos<计数)?(buf[pos++]和0xff):-1;
}