[java] Jansi를 활용하여 자바에서 터미널에서 GIF 애니메이션 출력하기

이번 블로그 포스트에서는 Jansi 라이브러리를 사용하여 자바 어플리케이션에서 터미널에서 GIF 애니메이션을 출력하는 방법을 알아보겠습니다.

Jansi란?

Jansi는 자바 어플리케이션에서 터미널에 ANSI 이스케이프 시퀀스를 사용하여 색상, 스타일 및 커서 제어기능을 추가할 수 있도록 도와주는 라이브러리입니다. 이를 통해 터미널에서 더 다양한 출력을 할 수 있게 됩니다.

GIF 애니메이션 출력하기

우선 Jansi를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 종속성을 추가합니다.

<dependencies>
    ...
    <dependency>
        <groupId>org.fusesource.jansi</groupId>
        <artifactId>jansi</artifactId>
        <version>1.18</version>
    </dependency>
</dependencies>

다음은 터미널에서 GIF 애니메이션을 출력하기 위한 예제 코드입니다.

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class GifAnimationExample {

    public static void main(String[] args) throws IOException {
        AnsiConsole.systemInstall();

        byte[] gifBytes = Files.readAllBytes(Paths.get("animation.gif"));

        while (true) {
            for (int i = 0; i < gifBytes.length; i++) {
                byte[] frame = {gifBytes[i]};
                AnsiConsole.out().print(Ansi.ansi().eraseScreen().a(new String(frame, StandardCharsets.US_ASCII)));
                AnsiConsole.out().flush();

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

위 코드는 현재 디렉토리에 있는 animation.gif 파일을 읽어와서 각 프레임을 ANSI 이스케이프 시퀀스를 사용하여 터미널에 출력합니다. 각 프레임은 100ms마다 변경되며, 애니메이션이 무한대로 반복됩니다.

결론

Jansi를 사용하면 자바 어플리케이션에서 터미널에서 다양한 출력을 할 수 있습니다. 이번 포스트에서는 GIF 애니메이션을 출력하는 방법을 소개했습니다. Jansi에 대한 자세한 내용은 공식 문서를 참고하시기 바랍니다.