문제

크기가 알려져 있지 않지만 MB에서 GB에 이르기까지 크기가 알 수없는 파일을 만들고 콘텐츠를 무작위로 채울 수있는 효율적인 방법을 찾고 있습니다. 나는 끝까지 점프하고 마지막 200 바이트를 쓰고 중간으로 이동하여 그곳에 쓴 것보다 처음 200 바이트를 작성할 수 있습니다. ~이다 RandomAccessFile 이 작업에 효율적이거나 이런 종류의 작업에 더 적합한 대안이 있습니까?

도움이 되었습니까?

해결책

예, 사용하십시오 RandomAccessFile - 그것이 거기에있는 것입니다. 너 ~할 수 있었다 잠재적으로 사용하십시오 FileChannel, 그러나 나는 갈 것이다 RandomAccessFile 먼저 - 더 간단 할 것입니다.

끝 부분을 작성한 후 파일의 "중간에 삽입"할 수는 없습니다.이를 지원하는 파일 시스템을 모릅니다. 최종 섹션을 작성하기 전에 기본적으로 완전한 크기를 알아야합니다. 대안은 끝까지 마지막 비트를 기억하면서 순차적으로 쓰는 것입니다.

해야 할 일에 대한 자세한 정보를 제공 할 수 있고 (크기에 대한 정보가있을 때) 더 많은 도움을 줄 수 있습니다.

편집 : 특정 크기의 파일을 만들려면 seek() 끝을 지나서 데이터를 작성하십시오.

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}

이것이 종료 된 후 file.dat 길이는 101 바이트입니다. (일반적으로 시도/마침내 등을 사용합니다.)

편집 : Coobird가 의견에 언급 된대로 setLength() 또한 파일을 확장하지만 현재 크기보다 길이가 줄어든 경우 파일도 자릅니다. 기본적으로 토런트 데이터를 작성하는 것에 대한 귀하의 의견을 감안할 때, 나는 찾는 것과 글쓰기가 정확히 당신이 원하는 행동이라고 생각합니다. 청크를 받으면 올바른 자리를 찾아서 작성하면 파일이 필요할 때 스스로 확장됩니다.

다른 팁

RandomAccessFile이 수행해야합니다

이 문제에 대해 RandomAccessFile이 괜찮다고 생각합니다

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