/**
 * Buffered Stream
 *
 * Demonstrates how to read from and write to a buffered stream.
 */

method main ()
{
    // create temp file and open for writing
    path = System.IO.File.temp_name()
    file = System.IO.FileStream.new(path, "w", "t", "r")

    // create buffered output stream
    stream = System.IO.BufferedStream.new(file)

    // build data (5000 'A's followed by 5000 'Z's)
    data = String.new()

    for (i; 0..10000) {
        if {i < 5000 ?
            data.append("A")
        } else {
            data.append("Z")
        }
    }

    // write 5000 'A's to to buffered output stream
    stream.write(data, 0, 5000)

    // write 5000 'Z's to to buffered output stream
    stream.write(data, 5000, 5000)

    // close output stream
    stream.close()

    // open temp file for reading
    file = System.IO.FileStream.new(path, "r", "e", "r")

    // create buffered input stream
    stream = System.IO.BufferedStream.new(file)
    data = String.new()

    // read first 5000 bytes from buffered input stream into data
    stream.read(data, 0, 5000)

    // print first byte, should be 'A'
    print(data[0])

    // read next 5000 bytes from buffered input stream into data
    stream.read(data, 0, 5000)

    // print first byte, should be 'Z'
    print(data[0])

    // close input stream
    stream.close()

    // delete temp file
    System.IO.File.delete(path)
}


try {
    main()
} else {
    print(last_excp())
}