문제

Java로 작성된 응용 프로그램이 JAR 파일을 사용하는 응용 프로그램이 있습니다 (둘 이상을 사용하지만 포인트가 아닙니다).

사실, 내가 사용하는 JAR 파일에는 파일 시스템에 절대적으로 추출 해야하는 파일이 포함되어 있습니다.

지금까지 Class.getResourCeasStream 및 FileOutputStream을 사용하고 있지만이 메소드는 다소 느립니다. 이 파일 중 일부는 텍스트 기반이지만 다른 파일은 단순히 바이너리입니다.

따라서 항아리에서 파일을 추출 할 필요성을 줄이려는 것 외에도 이러한 작업에 대한 최적화 (예 :보다 적절한 기능)가 있습니까?

내 응용 프로그램은 Java 6 기반이며 외부 의존성을 최소로 줄이고 싶습니다.

편집 : 향후 참조를 위해 낡은(비효율적) 코드는 다음과 같습니다.

int c;
while((c = is.read())!=-1){
    fos.write(c);
}

새롭고 훨씬 빠른 코드는 허용 된 답변을 참조하십시오.

도움이 되었습니까?

해결책

JAR 파일을 제어 할 수 있습니까? 압축되지 않은 경우 5월 더 빨리 만드십시오. 분명히 그것은 항아리 파일을 더 크게 만들 것입니다 ...

확인해야 할 또 다른 사항 - 파일을 어떻게 추출하고 있습니까? 예를 들어, 바이트로 바이트를하고 있다면 고통스럽게 느립니다. 다음과 같은 것을 사용하십시오.

public static void copyStream(InputStream input, OutputStream output)
     throws IOException
{
    // Reads up to 8K at a time. Try varying this.
    byte[] buffer = new byte[8192];
    int read;

    while ((read = input.read(buffer)) != -1)
    {
        output.write(buffer, 0, read);
    }
}

이미 이것을하고 있다면 더 많은 정보를 줄 수 있습니까? "다소 느린 속도"는 얼마나 느립니다. JAR 유틸리티를 사용하여 JAR 파일을 추출하는 것과 어떻게 비교됩니까?

다른 팁

오류. 당신이 정말로 무엇을하고 싶은지 잘 모르겠지만 Winzip 사용에 대해 생각 했습니까?

실행 시간에 파일을 동적으로 추출해야한다면 이것은 작동하지 않지만 왜이 작업을 수행 해야하는지 잘 모르겠습니다.이 JAR 파일이 얼마나 자주 변경됩니까?.

분명히 한 번 추출한 다음 응용 프로그램과 함께 배포 할 수 있습니까?

나는 존과 동의합니다. 두 가지가 추출을 더 빨리 만들 것입니다.

  1. 압축 수준 감소.
  2. 복사/추출 할 때 사용되는 버퍼 크기 증가.

추출이 필요하다는 것이 파일에서 쓰기/다시 읽어야하기 때문이라고 가정합니다. 파일이 충분히 작 으면 메모리가 충분히 크고 파일의 지속적인 특성은 필요하지 않습니다. 디스크를 스토리지로 사용하는 대신 전체 자원을 메모리에 매핑하는 것을 고려할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top