내 응용 프로그램에서 나는 블루투스를 통해 바이트 스트림을 수신하고있다. 내가 입력 스트림에서 한 번에 바이트의 고정 된 양을 읽을 수 DataInputStream
을 사용하고 :InputStream에서 바이트의 청크 읽기
private final InputStream mInStream = ...
...
DataInputStream dataInputStream = new DataInputStream(mInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}
내가이 BufferedInputStream
에 mInStream을 포장하여 성능을 개선하고 DataInputStream
에이 BufferedInputStream
를 할 수 있나요? 예 :
private final InputStream mInStream = ...
...
BufferedInputStream buffInStream = new BufferedInputStream(mInStream);
DataInputStream dataInputStream = new DataInputStream(buffInStream);
...
while(true) {
... = dataInputStream.readFully(buffer,0,length);
}
이 성능이 향상됩니까? 또는 입력 스트림에서 일정한 바이트 수를 읽고 있기 때문에 동일하게 유지됩니까?
감사
답장을 보내 주셔서 감사합니다. 바이트 스트림에서 고정 길이의 명령을 구문 분석해야하기 때문에 readFully가 필요합니다. readFully를 통해 읽은 각 데이터 프레임의 길이는 최대 128 바이트입니다. 그래서 이것을 정확하게 이해하면 길이가 128 인 버퍼를 만들어야합니다 (최대 명령 길이이기 때문에). 그리고 BufferedInputStrams로 성능을 얻으려면 좋은 크기가 될 것입니다. – Moonlit
이 경우에는 'BufferedInputStream'을 사용해야한다고 생각합니다. 그렇습니다. 하지만 '최대 128 바이트'및 '최대 명령 길이'에 대해 우려하고 있습니다. 기대 한 길이의 * 정확하게 * 버퍼를 사용할 필요가 있거나 각각의 경우 적절한 값의'length' 매개 변수를 제공해야합니다. 항상 128 바이트를 읽는다면 명령어가 더 짧을지라도 항상 '128 바이트'가됩니다. 이는 '많아야'이 의미합니다. – EJP
좋습니다. 문제가되지 않습니다. 그것이 같기 때문에 : 나는 데이터 전송을 시작하기 전에 전송 될 명령의 길이를 안다. 마찬가지로 Ok는 다음 데이터 스트림에서 길이 x의 명령을 모두받습니다. 그래서 길이 x의 버퍼를 만듭니다. 그리고 독서를 시작하십시오. 따라서 길이는 각 데이터 프레임마다 변경되지 않습니다. 응용 프로그램을 재구성 할 때 새로운 명령의 길이와 동일한 다른 길이의 버퍼 어레이를 다시 작성하여 다시 읽기 시작합니다. – Moonlit