Java – jarentry. Java when the jar file is opened from URL to InputStream Getsize() returns – 1

I tried to read the file from jarinputstream, and the size of the file returned - 1 I am accessing the jar file from the URL as InputStream

URLConnection con = url.openConnection();

        JarInputStream jis = new JarInputStream(con.getInputStream());
        JarEntry je = null;

        while ((je = jis.getNextJarEntry()) != null) {
            htSizes.put(je.getName(),new Integer((int) je.getSize()));
            if (je.isDirectory()) {
                continue;
            }
            int size = (int) je.getSize();
            // -1 means unkNown size.
            if (size == -1) {
                size = ((Integer) htSizes.get(je.getName())).intValue();
            }
            byte[] b = new byte[(int) size];
            int rb = 0;
            int chunk = 0;
            while (((int) size - rb) > 0) {
                chunk = jis.read(b,rb,(int) size - rb);
                if (chunk == -1) {
                    break;
                }
                rb += chunk;
            }
            // add to internal resource hashtable
            htJarContents.put(je.getName(),baos.toByteArray());
        }

Solution

This is a recorded act Javadoc says getsize()

Obviously, this is the case where the actual size of the compressed data is unknown Your application only needs to deal with this problem

follow-up

You commented on another answer:

If you do not have this size, you can still read the file and use ByteArrayOutputStream to buffer it, then call toByteArray () to extract the buffer byte to byte []. In fact, since (according to Tom hawtin's comments), the size of the report may be incorrect, you should do so anyway. Just treat the size of the report as a hint... And use it as the initial capacity of bytearrayoutputstream

(by the way, the code in your question may seem to work in this way... Judging from line 2 to the last line. The problem is that the rest of the code doesn't use a Bao object.)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>