온라인 콘텐츠를로드하려고합니다 (예 : 오디오 파일). 방금 원격 파일에 연결을 열고 (예 : new URL().openStream()
사용) 리모컨 InputStream
을 오디오 플레이어에 전달하면 네트워크에서 점차적으로가됩니다. 오디오 플레이어 라이브러리가 더 많은 데이터를 얻기 위해 InputStream
을 묻지 않으면 네트워크에서 아무 것도 읽지 않으며 라이브러리가 더 많은 정보를 요구하면 다시 읽습니다.다른 속도로 InputStream에서 여러 번 읽음
제 문제는 첫 번째 로딩 과정이 끝나자 마자 다음 온라인 오디오 파일을 캐싱하기 시작하려는 것입니다. 보통 InputStream
을 사용하면 오디오 재생이 완료되면 읽기가 완료됩니다. 네트워크 대역폭이 허용되면 더 빨리 읽으므로 다음 오디오 파일을 캐싱 할 때 좋지 않습니다. 내 오디오 파일은 3MB보다 작으므로 메모리에 안전하게 캐시 할 수 있습니다. 난 단지 하나의 파일을 prefetch하므로 메모리 누출 문제는 없다.
캐싱의 종류가 있습니까? InputStream
, 동시 읽기가 가능합니까? 그런 다음 오디오 플레이어가 데이터를 소비하는 것보다 빠르게 스레드를 실행하고 오디오를 캐시 할 수 있습니다.
글쎄,이게 내가 염두에두고있는 것이지만, 내 자신의 ConcurrentInputStream impl을 작성해야한다. 거기에 이미 구현이 있는지 물어 보았습니다. – Mohsen
commons-io에는 DemuxInputStream이 있지만 도움이되는지 잘 모르겠습니다. – Mohsen