til: 자바에서 특정 크기의 파일 생성

5432 단어 javajunitnio
최근에 저는 AWS S3 스토리지에 대한 단순 업로드 또는 멀티파트 업로드를 통해 파일을 업로드하는 새로운 기능을 코드베이스에 구현하고 싶었습니다. 실제로 개발하는 것은 재미있는 기능이었습니다. 저는 uploading an object using multipart upload에서 AWS SDK에 대해 많은 것을 배웠고 업로드 책임(및 전용 리소스)을 클라이언트 앱에 위임하는 데 매우 유용할 수 있는 presign urls을 사용했습니다.

이 기능을 테스트하려면 멀티파트 업로드를 트리거(또는 트리거하지)하기 위해 특정 크기의 더미 테스트 파일을 생성해야 했습니다.
  • 더미 파일을 git 저장소에 커밋하는 것은 절대 안 됩니다.
  • 테스트를 실행한 후 파일을 버려야 합니다.
  • 파일 생성이 가능한 한 빨라야 합니다.
  • 파일의 실제 내용은 중요하지 않습니다.

  • 처음 두 가지 요구 사항은 Junit 5TempDirectory extension1를 사용하여 답변할 수 있습니다.

    다른 요구 사항은 스파스 파일로 충족될 수 있습니다.

    Sparse files are files stored in a file system where consecutive data blocks consisting of all zero-bytes (null-bytes) are compressed to nothing. There is often no reason to store lots of empty data, so the file system just records how long the sequence of empty data is instead of writing it out on the storage media. This optimization can save significant amounts of storage space for other purposes.

    source



    다음 코드는 스파스 파일을 생성하고, 쓰기 위해 파일을 열고, 지정된 위치를 찾고 끝에 몇 바이트를 추가합니다. FileChannel 클래스를 활용합니다.

    @Test
    void example(@TempDir Path tempFolder) throws IOException {
        // The sparse option is only taken into account if the underlying filesystem
        // supports it
        final OpenOption[] options = {
                StandardOpenOption.WRITE, 
                StandardOpenOption.CREATE_NEW , 
                StandardOpenOption.SPARSE };
    
        final Path hugeFile = tempFolder.resolve("hugefile.txt");
    
        try (final SeekableByteChannel channel = Files.newByteChannel(hugeFile, options)) {
            // or any other size
            long giB = 1024L * 1014L * 1024L;
            channel.position(giB);
    
            // Write some random bytes
            final ByteBuffer buf = ByteBuffer.allocate(4).putInt(2);
            buf.rewind();
            channel.write(buf);
        }
    
        //Do something with my dummy file
    }
    


    실제로 디스크 공간을 할당할 필요가 없기 때문에 상대적으로 짧은 시간에 큰 스파스 파일을 만들 수 있으므로 적합합니다.
    빠른 "단위"테스트를 위해.

    추가 리소스:


  • https://www.baeldung.com/junit-5-temporary-directory
  • https://en.wikipedia.org/wiki/Sparse_file




  • 이 기능은 아직 실험 중입니다.

    좋은 웹페이지 즐겨찾기