Spec-Zone .ru
спецификации, руководства, описания, API
|
ГЛАВА 22
Вход и выход в Java организуется вокруг понятия потоков. Поток является последовательностью элементов, обычно 8-разрядных байтов, чтения или записанный со временем.
В java.io
пакет, весь ввод делается через подклассы абстрактного класса InputStream
, и весь вывод делается через подклассы абстрактного класса OutputStream
. Одно исключение к этому правилу является классом RandomAccessFile
, который обрабатывает файлы, которые позволяют произвольный доступ и возможно смешанное чтение и запись файла.
Для входного потока источник данных мог бы быть файлом, a String
, массив байтов, или байтов, записанных потоку вывода (обычно другим потоком). Есть также "входные потоки фильтра", которые берут данные от другого входного потока и преобразовывают или увеличивают данные прежде, чем поставить это как входной. Например, a LineNumberInputStream
байты передач через verbatim, но разделители строки количеств, поскольку они читаются.
Для потока вывода приемник данных мог бы быть файлом, массивом байтов, или буфером, который будет считан как входной поток (обычно другим потоком). Есть также, "фильтруют потоки вывода", которые преобразовывают или увеличивают данные прежде, чем записать это в некоторый другой поток вывода.
Экземпляр класса File
представляет путь (строка), который мог бы идентифицировать определенный файл в пределах файловой системы. Определенные операции на файловой системе, такие как переименование и удаление файлов, делаются этим классом, а не через потоки.
Экземпляр класса FileDescriptor
представляет абстрактную индикацию относительно определенного файла в пределах файловой системы; такие дескрипторы файлов создаются внутренне системой ввода-вывода Java.
Есть два интерфейса, DataInput
и DataOutput
, та поддержка передача данных кроме байтов или символов, таких как длинные целые, числа с плавающей точкой и строки. Класс DataInputStream
реализации DataInput
; класс DataOutputStream
реализации DataOutput
; и RandomAccessFile
реализации оба DataInput
и DataOutput
.
Класс StreamTokenizer
оказывает некоторую простую поддержку для того, чтобы проанализировать байты или символы от входного потока в маркеры, такие как идентификаторы, числа, и строки, дополнительно игнорируя комментарии и дополнительно распознавая или игнорируя разделители строки.
Иерархия классов определяется в пакете java.io
следующие. (Классы, в именах которых показывают здесь boldface
находятся в пакете java.io
; другие находятся в пакете java.lang
и, как показывают, здесь разъясняют отношения подкласса.)
Object§20.1
interfaceDataInput §22.1
interfaceDataOutput §22.2
InputStream §22.3
FileInputStream §22.4
PipedInputStream §22.5
ByteArrayInputStream §22.6
StringBufferInputStream §22.7
SequenceInputStream §22.8
FilterInputStream §22.9
BufferedInputStream §22.10
DataInputStream §22.11
LineNumberInputStream §22.12
PushBackInputStream §22.13
StreamTokenizer §22.14
OutputStream §22.15
FileOutputStream §22.16
PipedOutputStream §22.17
ByteArrayOutputStream §22.18
FilterOutputStream §22.19
BufferedOutputStream §22.20
DataOutputStream §22.21
PrintStream §22.22
RandomAccessFile §22.23
File §22.24
interfaceFileNameFilter §22.25
FileDescriptor §22.26
Throwable §20.22 Exception §20.22IOException §22.27
EOFException §22.28
FileNotFoundException §22.29
InterruptedIOException §22.30
UTFDataFormatException §22.31
java.io.DataInput
DataInput
интерфейс предусматривает чтение байтов от двоичного потока и восстановления от них данные в любых из типов примитивов Java. Есть также средство для того, чтобы восстановить a String
от данных в Java измененный формат UTF-8. DataOutput
интерфейс (§22.2) поддерживает создание данных двоичного выхода, подходящих для того, чтобы читать, въезжают задним ходом через DataInput
интерфейс.
DataInput
интерфейс реализуется классами DataInputStream
(§22.11) и RandomAccessFile
(§22.23).
public interfaceЭто обычно верно для всех подпрограмм чтения в этом интерфейсе, что, если конец файла достигается прежде, чем требуемое число байтов было считано,DataInput
{ public voidreadFully
(byte[] b) throws IOException, NullPointerException; public voidreadFully
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public intskipBytes
(int n) throws IOException; public booleanreadBoolean
() throws IOException; public bytereadByte
() throws IOException; public intreadUnsignedByte
() throws IOException; public shortreadShort
() throws IOException; public intreadUnsignedShort
() throws IOException; public charreadChar
() throws IOException; public intreadInt
() throws IOException; public longreadLong
() throws IOException; public floatreadFloat
() throws IOException; public doublereadDouble
() throws IOException; public StringreadLine
() throws IOException; public StringreadUTF
() throws IOException; }
EOFException
(который является своего рода IOException
) бросается. Если какой-либо байт не может быть считан ни по какой причине кроме конца файла, IOException
кроме EOFException
бросается. В частности IOException
может быть брошен, если входной поток был закрыт (§22.3.6).22.1.1 public void
readFully
(byte[] b)
throws IOException, NullPointerException
;
Общий контракт readFully(b)
это, это читает некоторые байты из входного потока и хранит их в буферный массив b
. Число чтения байтов равно длине b
.
Этот метод блоки до одного из следующих условий происходит:
b.length
байты входных данных доступны, когда нормальный возврат делается.
EOFException
бросается.
IOException
кроме EOFException
бросается. b
null
, a NullPointerException
бросается.
Если b.length
нуль, тогда никакие байты не читаются. Иначе, первое побайтовое чтение сохранено в элемент b[0]
, следующий в b[1]
, и так далее.
Если исключение выдается от этого метода, то может случиться так что некоторые, но не все байты b
были обновлены с данными от входного потока.
22.1.2 public void
readFully
(byte[] b, int off, int len)
throws IOException, NullPointerException
,
IndexOutOfBoundsException
Общий контракт readFully(b, off, len)
это, это читает len
байты от входного потока.
Этот метод блоки до одного из следующих условий происходит:
len
байты входных данных доступны, когда нормальный возврат делается.
EOFException
бросается.
IOException
кроме EOFException
бросается. b
null
, a NullPointerException
бросается.
Если off
отрицательно, или len
отрицательно, или off+len
больше чем длина массива b
, тогда IndexOutOfBoundsException
бросается.
Если len
нуль, тогда никакие байты не читаются. Иначе, первое побайтовое чтение сохранено в элемент b[off]
, следующий в b[off+1]
, и так далее. Число чтения байтов, самое большее, равно len
.
Если исключение выдается от этого метода, то может случиться так что некоторые, но не все байты b
в позициях off
через off+len-1
были обновлены с данными от входного потока.
22.1.3 public int
skipBytes
(int n) throws IOException
Общий контракт skipBytes
это, это предпринимает попытку перескочить n
байты данных от входного потока, отбрасывая пропущенные байты. Однако, это может перескочить через некоторое меньшее число байтов, возможно обнулить. Это может следовать из любого из многих условий; достижение конца файла прежде n
байты были пропущены, только одна возможность. Этот метод никогда не бросает EOFException
. Фактическое число пропущенных байтов возвращается.
22.1.4 public boolean
readBoolean
() throws IOException;
Общий контракт readBoolean
это, это читает входной байт того и возвраты true
если тот байт является ненулевым, false
если тот байт является нулем.
Этот метод является подходящим для того, чтобы считать байт, записанный writeBoolean
метод интерфейса DataOutput
(§22.2.4).
22.1.5 public byte
readByte
() throws IOException
Общий контракт readByte
это, это читает и возвращает входной байт того. Байт обрабатывается как значение со знаком в диапазоне -128
через 127
, включительно.
Этот метод является подходящим для того, чтобы считать байт, записанный writeByte
метод интерфейса DataOutput
(§22.2.5).
22.1.6 public int
readUnsignedByte
() throws IOException
Общий контракт readUnsignedByte
это, это читает входной байт того, нуль - расширяет это, чтобы ввести int
, и возвращает результат, который находится поэтому в диапазоне 0
через 255
.
Этот метод является подходящим для того, чтобы считать байт, записанный writeByte
метод интерфейса DataOutput
(§22.2.5), если параметр writeByte
был предназначен, чтобы быть значением в диапазоне 0
через 255
.
22.1.7 public short
readShort
() throws IOException
Общий контракт readShort
это, это читает два входных байта и возвращает a short
значение. Позволить a
будьте первым побайтовым чтением и b
будьте вторым байтом. Возвращенное значение:
(short)((a << 8) | (b & 0xff))
Этот метод является подходящим для того, чтобы считать байты, записанные writeShort
метод интерфейса DataOutput
(§22.2.6).22.1.8 public int
readUnsignedShort
() throws IOException
Общий контракт readUnsignedShort
это, это читает два входных байта и возвращается int
значение в диапазоне 0
через 65535
. Позволить a
будьте первым побайтовым чтением и b
будьте вторым байтом. Возвращенное значение:
(((a & 0xff) << 8) | (b & 0xff))
Этот метод является подходящим для того, чтобы считать байты, записанные writeShort
метод интерфейса DataOutput
(§22.2.6), если параметр writeShort
был предназначен, чтобы быть значением в диапазоне 0
через 65535
.22.1.9 public char
readChar
() throws IOException
Общий контракт readChar
это, это читает два входных байта и возвращает a char
значение. Позволить a
будьте первым побайтовым чтением и b
будьте вторым байтом. Возвращенное значение:
(char)((a << 8) | (b & 0xff))
Этот метод является подходящим для того, чтобы считать байты, записанные writeChar
метод интерфейса DataOutput
(§22.2.7).22.1.10 public int
readInt
() throws IOException
Общий контракт readInt
это, это читает четыре входных байта и возвращается int
значение. Позволить a
будьте первым побайтовым чтением, b
будьте вторым байтом, c
будьте третьим байтом, и d
будьте четвертым байтом. Возвращенное значение:
Этот метод является подходящим для того, чтобы считать байты, записанные(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
writeInt
метод интерфейса DataOutput
(§22.2.8).22.1.11 public long
readLong
() throws IOException
Общий контракт readLong
это, это читает восемь входных байтов и возвращает a long
значение. Позволить a
будьте первым побайтовым чтением, b
будьте вторым байтом, c
будьте третьим байтом, d
будьте четвертым байтом, e
будьте пятым байтом, f
будьте шестым байтом, g
будьте седьмым байтом, и h
будьте восьмым байтом. Возвращенное значение:
Этот метод является подходящим для того, чтобы считать байты, записанные(((long)(a & 0xff) << 56) |
((long)(b & 0xff) << 48) |
((long)(c & 0xff) << 40) |
((long)(d & 0xff) << 32) |
((long)(e & 0xff) << 24) |
((long)(f & 0xff) << 16) |
((long)(g & 0xff) << 8) |
((long)(h & 0xff)))
writeLong
метод интерфейса DataOutput
(§22.2.9).22.1.12 public float
readFloat
() throws IOException
Общий контракт readFloat
это, это читает четыре входных байта и возвращает a float
значение. Это делает это первым построением int
значение точно способом readInt
метод (§22.1.10), затем преобразовывая это int
оцените a float
точно способом метода Float.intBitsToFloat
(§20.9.23).
Этот метод является подходящим для того, чтобы считать байты, записанные writeFloat
метод интерфейса DataOutput
(§22.2.10).
22.1.13 public double
readDouble
() throws IOException
Общий контракт readDouble
это, это читает восемь входных байтов и возвращает a double
значение. Это делает это первым построением a long
значение точно способом readlong
метод (§22.1.11), затем преобразовывая это long
оцените a double
точно способом метода Double.longBitsToDouble
(§20.10.22).
Этот метод является подходящим для того, чтобы считать байты, записанные writeDouble
метод интерфейса DataOutput
(§22.2.11).
22.1.14 public String
readLine
() throws IOException
Общий контракт readLine
это, это читает последовательные байты, преобразовывая каждый байт отдельно в символ, пока это не встречается с разделителем строки или концом файла; чтение символов тогда возвращается как a String
. Отметьте, что, потому что этот метод обрабатывает байты, он не поддерживает ввод полного набора символов Unicode.
Если с концом файла встречаются прежде, чем даже один байт может быть считан, то null
возвращается. Иначе, каждый байт, который читается, преобразовывается в тип char
дополнением нулями. Если символ '\n'
встречается, это отбрасывается, и чтение прекращается. Если символ '\r'
встречается, это отбрасывается и, если следующий байт преобразовывает в символ '\n'
, тогда это отбрасывается также; чтение тогда прекращается. Если с концом файла встречаются перед любым из символов '\n'
и '\r'
встречается, чтение прекращается. Как только чтение прекратилось, a String
возвращается, который содержит все чтение символов и не отброшенный, взятый в порядке. Отметьте, что у каждого символа в этой строке будет значение меньше чем \u0100
, то есть, (char)256
.
22.1.15 public String
readUTF
() throws IOException
Общий контракт readUTF
это, это читает представление символьной строки Unicode, закодированной в Java измененный формат UTF-8; эта строка символов тогда возвращается как a String
.
Во-первых, два байта читаются и используются, чтобы создать 16-разрядное целое число без знака точно способом readUnsignedShort
метод (§22.1.8). Это целочисленное значение вызывают длиной UTF и определяет число дополнительных байтов, которые будут считаны. Эти байты тогда преобразовываются в символы, рассматривая их в группах. Длина каждой группы вычисляется из значения первого байта группы. Байт после группы, если таковые вообще имеются, является первым байтом следующей группы.
Если первый байт группы соответствует комбинацию двоичных разрядов 0xxxxxxx
(где x
означает, "может быть 0
или 1
"), тогда группа состоит из только того байта. Байт расширяется до нуля, чтобы сформировать символ.
Если первый байт группы соответствует комбинацию двоичных разрядов 110xxxxx
, тогда группа состоит из того байта a
и второй байт b
. Если нет никакого байта b
(потому что байт a
был последний из байтов, которые будут считаны), или если байт b
не соответствует комбинацию двоичных разрядов 10xxxxxx
, тогда a UTFDataFormatException
бросается. Иначе, группа преобразовывается в символ:
(char)(((a & 0x1F) << 6) | (b & 0x3F))
Если первый байт группы соответствует комбинацию двоичных разрядов 1110xxxx
, тогда группа состоит из того байта a
и еще два байта b
и c
. Если нет никакого байта c
(потому что байт a
был один из последних двух из байтов, которые будут считаны), или любой байт b
или байт c
не соответствует комбинацию двоичных разрядов 10xxxxxx
, тогда a UTFDataFormatException
бросается. Иначе, группа преобразовывается в символ:
(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
Если первый байт группы соответствует образец 1111xxxx
или образец 10xxxxxx
, тогда a UTFDataFormatException
бросается.
Если с концом файла встречаются в любое время во время этого всего процесса, то EOFException
бросается.
После того, как каждая группа была преобразована в символ этим процессом, символы собираются в том же самом порядке, в котором их соответствующие группы были считаны из входного потока, чтобы сформировать a String
, который возвращается.
writeUTF
метод интерфейса DataOutput
(§22.2.14) может использоваться, чтобы записать данные, которые являются подходящими для того, чтобы читать этим методом.
java.io.DataOutput
DataOutput
интерфейс предусматривает преобразование данных от любых из типов примитивов Java к серии байтов и записи этих байтов к двоичному потоку. Есть также средство для того, чтобы преобразовать a String
в Java измененный формат UTF-8 и запись получающейся серии байтов. DataInput
интерфейс (§22.1) может использоваться, чтобы читать в и восстановить данные Java от данных двоичного выхода, произведенных DataOutput
интерфейс.
DataOutput
интерфейс реализуется классами DataOutputStream
(§22.21) и RandomAccessFile
(§22.23).
public interfaceДля всех методов в этом интерфейсе, которые пишут байты, это - обычно истина это, если байт не может быть записан ни по какой причине,DataOutput
{ public voidwrite
(int b) throws IOException; public voidwrite
(byte[] b) throws IOException, NullPointerException; public voidwrite
(byte[] b, int off, int len) throws IOException, NullPointerException, IndexOutOfBoundsException; public voidwriteBoolean
(boolean v) throws IOException; public voidwriteByte
(int v) throws IOException; public voidwriteShort
(int v) throws IOException; public voidwriteChar
(int v) throws IOException; public voidwriteInt
(int v) throws IOException; public voidwriteLong
(long v) throws IOException; public voidwriteFloat
(float v) throws IOException; public voidwriteDouble
(double v) throws IOException; public voidwriteBytes
(String s) throws IOException, NullPointerException; public voidwriteChars
(String s) throws IOException, NullPointerException; public voidwriteUTF
(String s) throws IOException, NullPointerException; }
IOException
бросается.22.2.1 public void
write
(int b) throws IOException
Общий контракт для write
тот один байт, пишется потоку вывода. Байт, который будет записан, является восемью битами младшего разряда параметра b
. 24 бита старшего разряда b
игнорируются.
22.2.2 public void
write
(byte[] b)
throws IOException, NullPointerException
Общий контракт для write
это все байты в массиве b
пишутся, в порядке, к потоку вывода.
Если b
null
, a NullPointerException
бросается.
Если b.length
нуль, тогда никакие байты не пишутся. Иначе, байт b[0]
пишется сначала, тогда b[1]
, и так далее; последний записанный байт b[b.length-1]
.
22.2.3 public void
write
(byte[] b, int off, int len)
throws IOException, NullPointerException, IndexOutOfBoundsException
Общий контракт для write
это len
байты от массива b
пишутся, в порядке, к потоку вывода.
Если b
null
, a NullPointerException
бросается.
Если off
отрицательно, или len
отрицательно, или off+len
больше чем длина массива b
, тогда IndexOutOfBoundsException
бросается.
Если len
нуль, тогда никакие байты не пишутся. Иначе, байт b[off]
пишется сначала, тогда b[off+1]
, и так далее; последний записанный байт b[off+len-1]
.
22.2.4 public void
writeBoolean
(boolean v) throws IOException
Общий контракт для writeBoolean
тот один байт, пишется потоку вывода. Если параметр v
true
, значение (byte)1
пишется; если v
false
, значение (byte)0
пишется.
Байт, записанный этим методом, может быть считан readBoolean
метод интерфейса DataInput
(§22.1.4), который тогда возвратит a boolean
равный v
.
22.2.5 public void
writeByte
(int v) throws IOException
Общий контракт для writeByte
тот один байт, пишется потоку вывода, чтобы представить значение параметра. Байт, который будет записан, является восемью младшими разрядами - биты параметра b
. 24 бита старшего разряда b
игнорируются. (Это означает это writeByte
делает точно ту же самую вещь как write
для целочисленного параметра.)
Байт, записанный этим методом, может быть считан readByte
метод интерфейса DataInput
(§22.1.5), который тогда возвратит a byte
равный (byte)v
.
22.2.6 public void
writeShort
(int v) throws IOException
Общий контракт для writeShort
это, два байта пишутся потоку вывода, чтобы представить значение параметра. Значения байта, которые будут записаны, в показанном порядке:
(byte)(0xff & (v >> 8)) (byte)(0xff & v)Байты, записанные этим методом, могут быть считаны
readShort
метод интерфейса DataInput
(§22.1.7), который тогда возвратит a short
равный (short)v
.22.2.7 public void
writeChar
(int v) throws IOException
Общий контракт для writeChar
это, два байта пишутся потоку вывода, чтобы представить значение параметра. Значения байта, которые будут записаны, в показанном порядке:
(byte)(0xff & (v >> 8)) (byte)(0xff & v)Байты, записанные этим методом, могут быть считаны
readChar
метод интерфейса DataInput
(§22.1.9), который тогда возвратит a char
равный (char)v
.22.2.8 public void
writeInt
(int v) throws IOException
Общий контракт для writeInt
это, четыре байта пишутся потоку вывода, чтобы представить значение параметра. Значения байта, которые будут записаны, в показанном порядке:
(byte)(0xff & (v >> 24)) (byte)(0xff & (v >> 16)) (byte)(0xff & (v >> 8)) (byte)(0xff & v)Байты, записанные этим методом, могут быть считаны
readInt
метод интерфейса DataInput
(§22.1.10), который тогда возвратится int
равный v
.22.2.9 public void
writeLong
(long v) throws IOException
Общий контракт для writeLong
это, четыре байта пишутся потоку вывода, чтобы представить значение параметра. Значения байта, которые будут записаны, в показанном порядке:
(byte)(0xff & (v >> 56)) (byte)(0xff & (v >> 48)) (byte)(0xff & (v >> 40)) (byte)(0xff & (v >> 32)) (byte)(0xff & (v >> 24)) (byte)(0xff & (v >> 16)) (byte)(0xff & (v >> 8)) (byte)(0xff & v)Байты, записанные этим методом, могут быть считаны
readLong
метод интерфейса DataInput
(§22.1.11), который тогда возвратит a long
равный v
.22.2.10 public void
writeFloat
(float v) throws IOException
Общий контракт для writeFloat
это, четыре байта пишутся потоку вывода, чтобы представить значение параметра. Это делает это, как будто это сначала преобразовывает это float
оцените int
точно способом Float.floatToIntBits
метод (§20.9.22) и затем пишет int
значение точно способом writeInt
метод (§22.2.8).
Байты, записанные этим методом, могут быть считаны readFloat
метод интерфейса DataInput
(§22.1.12), который тогда возвратит a float
равный v
.
22.2.11 public void
writeDouble
(double v) throws IOException
Общий контракт для writeDouble
это, восемь байтов пишутся потоку вывода, чтобы представить значение параметра. Это делает это, как будто это сначала преобразовывает это double
оцените a long
точно способом Double.doubleToLongBits
метод (§20.10.21) и затем пишет long
значение точно способом writeLong
метод (§22.2.9).
Байты, записанные этим методом, могут быть считаны readDouble
метод интерфейса DataInput
(§22.1.13), который тогда возвратит a double
равный v
.
22.2.12 public void
writeBytes
(String s)
throws IOException, NullPointerException
Общий контракт для writeBytes
это для каждого символа в строке s
, взятый в порядке, один байт пишется потоку вывода.
Если s
null
, a NullPointerException
бросается.
Если s.length
нуль, тогда никакие байты не пишутся. Иначе, символ s[0]
пишется сначала, тогда s[1]
, и так далее; записанный последний знак s[s.length-1]
. Для каждого символа один байт пишется, байт младшего разряда, точно способом writeByte
метод (§22.2.5). Старший разряд восемь битов каждого символа в строке игнорируется.
22.2.13 public void
writeChars
(String s)
throws IOException, NullPointerException
Общий контракт для writeChars
тот каждый символ в строке s
пишется, в порядке, к потоку вывода, два байта за символ.
Если s
null
, a NullPointerException
бросается.
Если s.length
нуль, тогда никакие символы не пишутся. Иначе, символ s[0]
пишется сначала, тогда s[1]
, и так далее; записанный последний знак s[s.length-1]
. Для каждого символа два байта фактически пишутся, байт старшего разряда сначала, точно способом writeChar
метод (§22.2.7).
22.2.14 public void
writeUTF
(String s)
throws IOException, NullPointerException
Общий контракт для writeUTF
это, два байта информации о длине пишутся потоку вывода, сопровождаемому Java измененное представление UTF каждого символа в строке s
.
Если s
null
, a NullPointerException
бросается.
Каждый символ в строке s
преобразовывается в группу один, два, или три байта, в зависимости от значения символа.
Если символ c
находится в диапазоне '\u0001'
через '\u007f'
, это представляется на один байт:
(byte)cЕсли символ
c
'\u0000'
или находится в диапазоне '\u0080'
через '\u07ff'
, тогда это представляется на два байта, чтобы быть записанным в показанном порядке:
(byte)(0xc0 | (0x1f & (c >> 6))) (byte)(0x80 | (0x3f & c))Если символ
c
находится в диапазоне '\u0800'
через '\uffff'
, тогда это представляется на три байта, чтобы быть записанным в показанном порядке:
(byte)(0xc0 | (0x0f & (c >> 12))) (byte)(0x80 | (0x3f & (c >> 6))) (byte)(0x80 | (0x3f & c))Во-первых, общее количество байтов должно было представить все символы
s
вычисляется. Если это число больше чем 65535
, тогда a UTFDataFormatError
бросается. Иначе, эта длина пишется потоку вывода точно способом writeShort
метод (§22.2.6); после этого один - два - или трехбайтовое представление каждого символа в строке s
пишется.
Байты, записанные этим методом, могут быть считаны readUTF
метод интерфейса DataInput
(§22.1.15), который тогда возвратит a String
равный s
.
Содержание | Предыдущий | Следующий | Индекс
Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com