import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;

public class Test {
    public static void main(final String[] args)  {
        try (Arena reinterpretTarget = Arena.ofConfined()) {
            MemorySegment reinterpreted;

            try (Arena arena = Arena.ofConfined()) {
                MemorySegment segment = arena.allocateFrom("foo");

                reinterpreted = segment.reinterpret(reinterpretTarget, System.out::println);

                System.out.printf("Original: %s%n", reinterpreted.getString(0));
                System.out.printf("Reinterpreted before close: %s%n", reinterpreted.getString(0));
            }

            System.out.printf("Reinterpreted after close: %s%n", reinterpreted.getString(0));
            for (int i = 0; i < reinterpreted.byteSize(); i++) {
                System.out.printf("%d: %d%n", i, reinterpreted.get(ValueLayout.JAVA_BYTE, i));
            }
        }
    }
}