마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 outputStream 비우기

0 추천

안드로이드 스튜디오 블루투스를 통해서 클라이언트가 서버로 데이터를 전송합니다.

1번 버튼을 누르면 a라는 문자가 전송되고

2번 버튼을 누르면 bbb라는 문자가 전송됩니다.

하지만 bbb를 전송한 이후 a를 전송하면 a와bbb가 이상하게 합쳐져서 보내집니다.

a◆◆bbb 이런식으로 나옵니다.

outputStream에 flush를 하면 outputStream을 비운다고 하는데 잘 안되는거 같아요...

 

outputStream.flush()

outputStream.write()

 

이런식으로 write전에 flush를 사용해서 비우고 전송하려했는데 잘 안되네요...

제가 flush를 잘못 사용한것인가요?

outputStream를 비우려면 어떻게 해야하나요..?

개미1 (1,260 포인트) 님이 2021년 11월 1일 질문

1개의 답변

0 추천

API를 살펴보면

flush()

Flushes this output stream and forces any buffered output bytes to be written out.

위처럼 설명이 나옵니다. 즉  flush의 역할은 buffer에 남아 있는 데이터를 내보내게 되므로, 결국은 님이 말하는 '비우기'의 역할을 하는게 맞는 거 같습니다. 따라서 flush 다음에  write 호출하는 필요가 없어 보여요.

그리고 제가 직접 해당 코드를 실행하는 것이 아니라서 잘 알 수 있는 없지만, 한가지 드는 생각은 aaa 와  bbb를 전송하는 시간차가 없기 때문에 패킷이 전송되면서 일부 바이트가 누수되거나 수신측에서 너무 빨리 들어오는 패킷을 제대로 받아 처리하지 못하는 것이 아닌가 싶은데, 중간에 딜레이를 살짝 줘보시죠.

spark (227,830 포인트) 님이 2021년 11월 2일 답변
...