danikula / AndroidVideoCache

Cache support for any video player with help of single line
Apache License 2.0
5.43k stars 1.16k forks source link

ProxyCacheException: offset < 0: -2147476036 #301

Open zhuxing1990 opened 3 years ago

zhuxing1990 commented 3 years ago

The code that caused the exception at com.danikula.videocache.file.FileCache.available(FileCache.java:46)

//old code : @Override public synchronized long available() throws ProxyCacheException { try { return (int) dataFile.length(); } catch (IOException e) { throw new ProxyCacheException("Error reading length of file " + file, e); } }

//change code @Override public synchronized long available() throws ProxyCacheException { try { long fileSize = dataFile.length(); return fileSize; } catch (IOException e) { throw new ProxyCacheException("Error reading length of file " + file, e); } }

this is error log: com.danikula.videocache.ProxyCacheException: Error writing 8192 bytes to java.io.RandomAccessFile@530f0a3 from buffer with size 8192. Version: 2.7.1 at com.danikula.videocache.file.FileCache.append(FileCache.java:73) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:132) at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19) at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187) at java.lang.Thread.run(Thread.java:919) Caused by: java.io.IOException: offset < 0: -2147476036 at java.io.RandomAccessFile.seek(RandomAccessFile.java:612) at com.danikula.videocache.file.FileCache.append(FileCache.java:69) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:132)  at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19)  at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187)  at java.lang.Thread.run(Thread.java:919) 

com.danikula.videocache.ProxyCacheException: Error writing 764 bytes to java.io.RandomAccessFile@530f0a3 from buffer with size 8192. Version: 2.7.1 at com.danikula.videocache.file.FileCache.append(FileCache.java:73) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:132) at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19) at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187) at java.lang.Thread.run(Thread.java:919) Caused by: java.io.IOException: offset < 0: -2147476036 at java.io.RandomAccessFile.seek(RandomAccessFile.java:612) at com.danikula.videocache.file.FileCache.append(FileCache.java:69) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:132)  at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19)  at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187)  at java.lang.Thread.run(Thread.java:919) 

zhuxing1990 commented 3 years ago

备注:缓存失败的原因是 文件的类型 (long) 被强制转换成了(int)类型 ,int类型的长度不够,从而导致文件缓冲失败。