temp132에 데이터를 바이트로 바꾸는 과정 중에요..
buffer = stream.toByteArray(); 이 부분에서 buffer를 계속 대입하고 싶은데 어떻게 하면 좋을까요??
C언어의 경우는 buffer += data; 이렇게 하면 되는데
자바쪽은 잘 모르겠네요 ㅜㅜ
String[] temp132 = data.split(" ");
//output2.append("test : " + data+"\n");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (int i = 0; i < temp132.length; i++) {
try {
stream.write(temp132[i].getBytes());
} catch (IOException e) {
e.printStackTrace();
}
buffer = stream.toByteArray();
}
------------------------------------------8월 2일 추가 내용 -----------------------------------------
제가 사실은 이미지 송수신 부분을 하고 있는데요.. 일부 코드가 어떻게 해야할지 몰라서 질문 드렸었습니다. ㅠㅠ 그런데 다시 코드 부분을 수정하였는데요.. 일단 구성 자체가 임베디드에서 이미지 데이터를 16 byte 씩 전송하고, 스마트폰에 그 이미지를 뿌려주려고 하는데요..
1. 이 부분은 임베디드(송신) 부분의 일부 코드이구요..
설명 : 임베디드에 캡처한 이미지를 불러와 fread(buf, 1, 16, file) 16 byte씩 불러와 sprint에서 byte -> int > string인 str1에 문자열로 넣게 됩니다. (str1, "I %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", %d가 16개에요, buf에 들어있는 byte 변수를 %d로 정수형 입력한 후 str1 에 넣습니다. 이 때 앞에 I는 제가 이미지 뿐만 아니라 다른 데이터도 전송하고 있어서 이미지 데이터인 것을 if 로 분류하려고 전송하였습니다), 라인 10에 fsize4는 String 으로 변환했기 때문에 strlen을 사용하여 길이를 대입하였어요. 라인 7에 fpsize를 사용하면 데이터가 짤리더라구요.. 그래서 이렇게 이미지 데이터가 끝날때까지 이미지 데이터를 전송하도록 구현하였어요.
line code
1. printf("file size [%d]\n", fsize);
2. fsize2 = htonl(fsize);
3. printf("file size [%d] \n", fsize2);
4. fclose(camera);
5.
6. while(nsize != fsize){
7. fpsize = fread(buf, 1, 16, file);
8. nsize = nsize + fpsize;
9. sprintf(str1, "I %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], buf[13], buf[14], buf[15]);
10. fsize4 = strlen(str1);
11. send(connSock[0], str1, fsize4, 0);
12. }
2. 안드로이드(수신) 부분, 이미지 출력
- 2.1 일단, 이 부분이 수신되는 부분 입니다.
BufferedReader를 사용해서 데이터를 받고 있는데, String 으로 밖에 받아지지 않더군요 ㅠㅠㅠ 일단 이렇게 구성하여 data = socket_in.readLine(); 여기 data 에 전송받은 데이터를 넣었습니다.
String data = "";
....
socket_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
....
final Thread mCheckRecv = new Thread(){
public void run(){
try {
while (true) {
data = socket_in.readLine();
Recv.sendEmptyMessage(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
- 2.2 여기서 이미지 데이터를 분류하려고 해요
아까 수신받은 데이터를 data에 있는 것을 String[] temp132 = data.split(" "); 을 통해 데이터를 나눕니다. ("I %d %d %d %d...",,, %d와 %d 사이에 " "를 구분해서 temp132에 넣고, for문에서 temp132[0]에 "I" 가 있기 때문에 I를 제외하고 변환해야하기 때문에 for문에 imct = 1 부터 시작하였구요, (temp132.length)-1)는 I를 포함한 temp132.lenth가 17이기 때문에 -1을 해줘서 16을 만들어 주었습니다. 이때 temp132는 String 이기 때문에 Integer.parseInt(temp132[imct]); 를 통해 정수로 바꾸어 yyy에 넣고 yyy를 강제 변환한 후 buffer 바이트 배열에 넣어주었습니다.
int yyy=0;
int count10 =0;
Byte buffer[] = new Buffer[8000000];
....
final Handler Recv = new Handler() {
public void handleMessage(Message msg) {
updataThread();
}
private void updataThread() {
String[] temp132 = data.split(" ");
if(temp132[0].equals("I")) {
for(int imct=1; imct<=((temp132.length)-1); imct++){
yyy = Integer.parseInt(temp132[imct]);
output2.append("yyy : " + yyy);
buffer[count10] = (byte)yyy;
++count10;
}
}
- 2.3 마지막으로 버튼을 통해 이미지 출력부분입니다
단순히 이미지 전송이 끝나면 완료가 된 데이터를 BitmapFactory.decodeByteArray(buffer, 0, buffer.length); 를 통해 이미지 출력합니다.
Button btn4 = (Button) findViewById(R.id.img);
btn4.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);
image.setImageBitmap(bitmap);
}
});
근데 출력이 되지 않아요...ㅠㅠ 뭐가 잘못된지 모르겠어요...ㅠㅠ