//: c12:EncodeDecode.java
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.nio.*;
import java.nio.charset.*;
import com.bruceeckel.simpletest.*;

public class EncodeDecode {
  private static Test monitor = new Test();
  public static void print(ByteBuffer bb) {
    while(bb.hasRemaining())
      System.out.print(bb.get() + " ");
    System.out.println();
    bb.rewind();
  }
  public static void main(String[] args) {
    ByteBuffer bb = ByteBuffer.wrap(
      new byte[]{0,0,0,0,0,0,0,(byte)'a'});
    System.out.println("Initial Byte Buffer");
    print(bb);
    Charset[] csets = {Charset.forName("UTF-16LE"),
    Charset.forName("UTF-16BE"),
    Charset.forName("UTF-8"),
    Charset.forName("US-ASCII"),
    Charset.forName("ISO-8859-1")};
    for(int i = 0; i < csets.length; i++) {
      System.out.println(csets[i].name() + ":");
      print(csets[i].encode(bb.asCharBuffer()));
      csets[i].decode(bb);
      bb.rewind();
    }
    monitor.expect(new String[] {
      "Initial Byte Buffer",
      "0 0 0 0 0 0 0 97 ",
      "UTF-16LE:",
      "0 0 0 0 0 0 97 0 ",
      "UTF-16BE:",
      "0 0 0 0 0 0 0 97 ",
      "UTF-8:",
      "0 0 0 97 ",
      "US-ASCII:",
      "0 0 0 97 ",
      "ISO-8859-1:",
      "0 0 0 97 "
    });
  }
} ///:~