S40大文件流创建Player问题
????? 我们在开发流媒体播放器的时候,可能会遇到这样子的问题,如:打开大文件(一般大于700k)将其转化为流,再使用其流创建player的时候,在s40这样子的机子上面会报OutOfMemory。
????? 解决办法:
????? (一):分段读取
????? 将大文件分成小段读取,然后用小段文件来创建。
?/**
???? * 获取部分本地歌曲文件
???? * @return byte[]
???? */
??? private synchronized byte[] getPartBytes() {
??????? try {
??????????? if (dis == null) {
??????????????? return null;
??????????? }
??????????? int bufferLength = PER_READ_LOCAL_LENGTH;
??????????? if (totalSize < offset + PER_READ_LOCAL_LENGTH) {
??????????????? bufferLength = (int) (totalSize - offset);
??????????? }
??????????? byte[] buffer = new byte[bufferLength];
??????????? try {
//??????????????????? dis.skip(offset);
??????????????? //自己写的skip(),系统提供的效率太低
//??????????????????? skip(dis, offset);
??????????????? int p = dis.read(buffer, 0, bufferLength);
??????????????? if (p != -1) {
??????????????????? offset += p;
??????????????? }
??????????? } catch (IOException ex) {
??????????? }
??????????? return buffer;
??????? } catch (Exception ex1) {
??????????? return null;
??????? } finally {
??????????? if (offset >= totalSize) {
??????????????? try {
??????????????????? if (dis != null) {
??????????????????????? dis.close();
??????????????????? }
??????????????????? fs.close();
??????????????? } catch (IOException ex2) {
??????????????? }
??????????? }
??????? }
??? }
(二),在jad中增加标识也可以解决,但是也会存在一些问题。
修改jad:
Nokia:
progressive_download: enabled
Sony:
progressive_download: enable
相关文章,可以参考:
官方:
http://wiki.forum.nokia.com/index.php/KIJ000449_-_Playing_large_audio_files_by_using_InputStream_throws_an_OutOfMemoryError
?
Nokia论坛:
http://discussion.forum.nokia.com/forum/showthread.php?t=95500