私はZipInputStreamを使用して読み込み中のzipファイルに画像ファイルを束ね、AppletからZipEntryを反復処理します。私が署名したjarファイル「ze.getSize()
」に、これらの画像を置くときZipInputStreamとJarInputStreamのZipEntryサイズの不一致
ZipInputStream zis = new ZipInputStream(in);
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
htSizes.put(ze.getName(), new Integer((int) ze.getSize()));
if (ze.isDirectory()) {
continue;
}
int size = (int) ze.getSize();
// -1 means unknown size.
if (size == -1) {
size = ((Integer) htSizes.get(ze.getName())).intValue();
}
byte[] b = new byte[(int) size];
int rb = 0;
int chunk = 0;
while (((int) size - rb) > 0) {
chunk = zis.read(b, rb, (int) size - rb);
if (chunk == -1) {
break;
}
rb += chunk;
}
// add to internal resource hashtable
htJarContents.put(ze.getName(), b);
}
は、しかし-1として来ている、とイメージファイルが間違って読んできています。
誰かがこの点で私を助けることができますか?
あなたが本当にint型にサイズをダウン切り捨てるべきではありません。また、以下の@ JonSkeetの答えを見てください。 – Perception
jarファイルがURLからのInputStreamとして開かれたときに[JarEntry.getSize()が-1を返す可能性があります](http://stackoverflow.com/questions/8909743/jarentry-getsize-is-returning-1-when- the-jar-files-is-input-stream-f) –
なぜ圧縮画像の入力ストリームを取得し、それを 'ImageIO.read(InputStream)'に渡すのはなぜですか? –