Git Product home page Git Product logo

Comments (10)

gotson avatar gotson commented on May 23, 2024

Can you provide the stack trace?

from junrar.

gotson avatar gotson commented on May 23, 2024

Can you provide sample code on how you use the library in that case? Are you using a stream or a file?

from junrar.

xiaokanmengsi avatar xiaokanmengsi commented on May 23, 2024

Can you provide sample code on how you use the library in that case? Are you using a stream or a file?
The source.rar size is 3.25G;

import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * @author chengpei
 */
public class RarUtil {

    public static void main(String[] args){
        String rarPath = "D:\\test\\source.rar";
        String destinationPath = "D:\\test\\unrar\\";
        try {
            unrar(rarPath,destinationPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * unrar
     * @param rarPath rar file path
     * @param destinationPath unrar file path
     */
    public static void unrar(String rarPath, String destinationPath) throws Exception{
        try (FileInputStream inputStream = new FileInputStream(rarPath);
             final Archive archive = new Archive(inputStream);
             FileOutputStream outputStream = new FileOutputStream(destinationPath)){
            while (true) {
                FileHeader fileHeader = archive.nextFileHeader();
                if (fileHeader == null) {
                    break;
                }
                archive.extractFile(fileHeader, outputStream);
            }
        } catch (Exception e){
            throw e;
        }
    }
}

This is the stack trace:

com.github.junrar.exception.CorruptHeaderException
	at com.github.junrar.Archive.readHeaders(Archive.java:345)
	at com.github.junrar.Archive.setChannel(Archive.java:199)
	at com.github.junrar.Archive.setVolume(Archive.java:811)
	at com.github.junrar.Archive.<init>(Archive.java:149)
	at com.github.junrar.Archive.<init>(Archive.java:178)
	at com.vrv.vap.generator.util.RarUtil.unrar(RarUtil.java:35)
	at com.vrv.vap.generator.util.RarUtil.main(RarUtil.java:21)

from junrar.

gotson avatar gotson commented on May 23, 2024

A recommendation, if you have a file on disk, it's better to use the methods that take a File instead of an InputStream, this will be more performant

from junrar.

xiaokanmengsi avatar xiaokanmengsi commented on May 23, 2024

A recommendation, if you have a file on disk, it's better to use the methods that take a File instead of an InputStream, this will be more performant

改用文件之后可以正常解压,但是用FileInputStream的时候会报错,报错的方法是RandomAccessInputStream.readUntil的124行,当文件长度大于int的最大值时,变量length会变成负数。

from junrar.

gotson avatar gotson commented on May 23, 2024

I can't read Chinese, but i roughly get what you said using Google Translate.

When using a File, junrar uses RandomAccessFile which is part of JDK. There is no such thing for streams, so we have our own implementation of RandomAccessInputStream which does caching in memory. It's less efficient to do caching in memory than to use the RandomAccessFile.

from junrar.

xiaokanmengsi avatar xiaokanmengsi commented on May 23, 2024

I can't read Chinese, but i roughly get what you said using Google Translate.

When using a File, junrar uses RandomAccessFile which is part of JDK. There is no such thing for streams, so we have our own implementation of RandomAccessInputStream which does caching in memory. It's less efficient to do caching in memory than to use the RandomAccessFile.

When using FileInputStrean, RandomAccessInputStream will be wrong every time, you can debug it use my code, when the 'length' is reach Integer.MAX_VALUE, then the 'length' will be negative,so the thread can not read anything.

from junrar.

gotson avatar gotson commented on May 23, 2024

i fixed it, thanks for your analysis. But use File instead of InputStream if you can, you will have better perf.

from junrar.

xiaokanmengsi avatar xiaokanmengsi commented on May 23, 2024

I hope you can fix this in the BUG in next version as soon as possible. Thank you very much!

from junrar.

github-actions avatar github-actions commented on May 23, 2024

🎉 This issue has been resolved in version 7.5.4 🎉

The release is available on:

Your semantic-release bot 📦🚀

from junrar.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.