2009-10-09 2 views
2

온라인 콘텐츠를로드하려고합니다 (예 : 오디오 파일). 방금 원격 파일에 연결을 열고 (예 : new URL().openStream() 사용) 리모컨 InputStream을 오디오 플레이어에 전달하면 네트워크에서 점차적으로가됩니다. 오디오 플레이어 라이브러리가 더 많은 데이터를 얻기 위해 InputStream을 묻지 않으면 네트워크에서 아무 것도 읽지 않으며 라이브러리가 더 많은 정보를 요구하면 다시 읽습니다.다른 속도로 InputStream에서 여러 번 읽음

제 문제는 첫 번째 로딩 과정이 끝나자 마자 다음 온라인 오디오 파일을 캐싱하기 시작하려는 것입니다. 보통 InputStream을 사용하면 오디오 재생이 완료되면 읽기가 완료됩니다. 네트워크 대역폭이 허용되면 더 빨리 읽으므로 다음 오디오 파일을 캐싱 할 때 좋지 않습니다. 내 오디오 파일은 3MB보다 작으므로 메모리에 안전하게 캐시 할 수 있습니다. 난 단지 하나의 파일을 prefetch하므로 메모리 누출 문제는 없다.

캐싱의 종류가 있습니까? InputStream, 동시 읽기가 가능합니까? 그런 다음 오디오 플레이어가 데이터를 소비하는 것보다 빠르게 스레드를 실행하고 오디오를 캐시 할 수 있습니다.

답변

2

다운로드를 수행하기 위해 두 번째 스레드를 만드는 것이 좋습니다. 이 스레드에서 가능한 한 빨리 파일을 다운로드하고 데이터를 기본 재생 스레드로 푸시하십시오.

+0

글쎄,이게 내가 염두에두고있는 것이지만, 내 자신의 ConcurrentInputStream impl을 작성해야한다. 거기에 이미 구현이 있는지 물어 보았습니다. – Mohsen

+0

commons-io에는 DemuxInputStream이 있지만 도움이되는지 잘 모르겠습니다. – Mohsen