내 in-the-wild 서버 오류 로그에서 "재미있는"예외가 발생했습니다. 내 응용 프로그램의 예외 및 "wtf"오류가 내 중앙 서버에 게시되므로 많은 정보가 없습니다. 정확히 happend. 나는 그것이 일어난다는 것을 알고 있으며, 나는 단서가 없다.Android FileOutputStream.write : got java.io.IOException : 수학 결과를 표현할 수 없음
스택 트레이스 : net.jav.apps.romeolive.RomeoInterface 대신
java.io.IOException: Math result not representable at org.apache.harmony.luni.platform.OSFileSystem.writeImpl(Native Method) at org.apache.harmony.luni.platform.OSFileSystem.write(OSFileSystem.java:129) at java.io.FileOutputStream.write(FileOutputStream.java:297) at net.jav.apps.romeolive.RomeoInterface.fetchBinaryToFile(RomeoInterface.java:299) at net.jav.apps.romeolive.HeartBeatService$_fetchPic.run(HeartBeatService.java:327) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) at java.lang.Thread.run(Thread.java:1096)
코드 :
byte[] ret=fetchBinary(fullurl);
if (ret==null) return false;
try
{
FileOutputStream os=new FileOutputStream(getCacheFileName(type,fullurl));
os.write(ret, 0, ret.length);
은 "실패"선 # 299는 OS입니다. write()
fetchBinary (url) 웹 서버에서 일부 바이너리 파일 (축소판 jpg)을 가져 와서 byte [] 또는 찾지 못하면 NULL을 반환합니다.
getCacheFileName (type, fullurl)은 cacheDir() 더하기 유형과 새 니타 이징 된 fullurl을 반환합니다 (슬래시를 제거하고 URL의 localpart 만 사용하십시오).
정확히 무엇이 실패할까요? 기존 썸네일 jpg byte []를 cacheDir()의 완벽하게 조작 된 파일 이름에 쓰려고합니다.
이 예외가 발생한 장치는 다음과 같습니다 (GT-I9000/samsung/GT-I9000/GT-I9000/GT-I9000 : 2.2.1/FROYO/XXJPY : 사용자/릴리스 키
"수학 결과를 IOException으로 표현할 수 없습니까?" 나는 그 일을 제대로 처리하고 싶다;) Google과 Stackoverflow는 도움이되거나 심지어 관련있는 것을 보여주지 못했다.
고마워, 올리버
가 I (2) ERANGE 나열시킨 쓰는 다른 맨 발견) -> ERANGE의 FD가 스트림을 지칭 기록 할 바이트의 총수 는 최소 및 최대 기록 범위 밖이며, 최소값은 0이 아닙니다. ... 아직 나에게 어떤 의미가 있는지 ... – Oliver
내 의견을 다시 읽고 ... 나를 생각하게한다 ... "최소값은 0이 아니다"... 0 바이트 (서버를 정말로 쓰려고 했습니까? 나에게 0 바이트를 보냈다)? 그 경우 일어날 일을 시도 할거야 ... * try * 예외 :-( – Oliver
write()에 0의 카운트 값을 전달하는 것이 합법적이라고 생각한다. 파일 상태를 검사하는 방법으로 생각된다. .맨 페이지에서 (그들 중 하나, 어쨌든 :-) : "count가 0이고 fd가 일반 파일을 참조하면, write()는 아래 오류 중 하나가 감지되면 실패 상태를 반환 할 수 있습니다. count가 0이고 fd가 일반 파일이 아닌 파일을 참조하면 결과가 지정되지 않습니다. " –