我正在实施一个蓝牙Android应用程序,其中Image从一个设备发送到另一个设备。位图的字节数组在接收端发送并成功重建。但是,我需要将一个整数值与位图一起作为索引发送(因此接收方知道如何处理接收到的位图)。所以基本上我想用字节流发送它:
INT |位图
因为我需要将一个int转移到27,这意味着它适合单个字节,对吧?我目前的代码如下:
ba[0] = Integer.valueOf(drawableNumber).byteValue(); //drawableNumber value is between 1 and 27
ByteArrayOutputStream bs = new ByteArrayOutputStream(); //create new output stream
try {
bs.write(ba); //bytes of the integer
bs.write(bitmapdata); //bytes of the bitmap
bs.toByteArray() // put everything into byte array
}
mChatService.write(bs.toByteArray()); // that is where bytes are sent to another device
在接收端:
case MESSAGE_READ:
readBuf = (byte[]) msg.obj; // readBuf contains ALL the received bytes using .read method
所以我的问题是,如何重建整数和我发送的图像(基本上是一个字节到一个整数)?我设法单独重建位图,但我需要这个额外的整数值来知道如何处理接收到的图像。整数值将始终在0到27之间。我检查了所有其他答案,但找不到合适的解决方案..
编辑:主要问题是如何将整数字节与字节数组中的位图字节分开。因为在接收端我想分别重建发送的整数和位图
答案 0 :(得分:0)
当我在java中尝试这个时,它只是告诉我当我评论时我的想法是什么。整数表示为一个字节(因此在您的情况下,它只是ba [0])。或者它应该基于您的代码。除此之外,这将是一个漫长的过程。这意味着它也是第一个从缓冲区读出的字节(或应该是)。
import java.io.ByteArrayOutputStream;
public class TestClass {
public static void main(String args[]){
byte[] ba = new byte[10];
int myInt = 13;
ByteArrayOutputStream bs = new ByteArrayOutputStream(); //create new output stream
try {
bs.write(myInt); //bytes of the integer
ba = bs.toByteArray(); // put everything into byte array
} finally{};
for(int i = 0; i < ba.length; i++){
System.out.println(i);
System.out.println(ba[i]);
}
}
}
我再次意识到这不是一个答案,对评论来说太过分了。
答案 1 :(得分:0)
由于将一个字节转换为一个int是一个向下转换,你可以将该字节分配给一个int变量。
int myInt = ba[0];