Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | Индекс

ГЛАВА 22

Пакет java.io


Вход и выход в 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				
	interface DataInput												§22.1
	interface DataOutput												§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
	interface FileNameFilter												§22.25
	FileDescriptor												§22.26
	Throwable												§20.22
		Exception												§20.22
			IOException												§22.27
				EOFException												§22.28
				FileNotFoundException												§22.29
				InterruptedIOException												§22.30
				UTFDataFormatException												§22.31

22.1 Интерфейс 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 void readFully(byte[] b)
		throws IOException, NullPointerException;
	public void readFully(byte[] b, int off, int len)
		throws IOException, NullPointerException,
			IndexOutOfBoundsException;
	public int skipBytes(int n) throws IOException;
	public boolean readBoolean() throws IOException;
	public byte readByte() throws IOException;
	public int readUnsignedByte() throws IOException;
	public short readShort() throws IOException;
	public int readUnsignedShort() throws IOException;
	public char readChar() throws IOException;
	public int readInt() throws IOException;
	public long readLong() throws IOException;
	public float readFloat() throws IOException;
	public double readDouble() throws IOException;
	public String readLine() throws IOException;
	public String readUTF() 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 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 байты от входного потока.

Этот метод блоки до одного из следующих условий происходит:

Если 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) может использоваться, чтобы записать данные, которые являются подходящими для того, чтобы читать этим методом.

22.2 Интерфейс 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 void write(int b) throws IOException;
	public void write(byte[] b)
		throws IOException, NullPointerException;
	public void write(byte[] b, int off, int len)
		throws IOException, NullPointerException,
			IndexOutOfBoundsException;
	public void writeBoolean(boolean v) throws IOException;
	public void writeByte(int v) throws IOException;
	public void writeShort(int v) throws IOException;
	public void writeChar(int v) throws IOException;
	public void writeInt(int v) throws IOException;
	public void writeLong(long v) throws IOException;
	public void writeFloat(float v) throws IOException;
	public void writeDouble(double v) throws IOException;
	public void writeBytes(String s)
		throws IOException, NullPointerException;
	public void writeChars(String s)
		throws IOException, NullPointerException;
	public void writeUTF(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

free hit counter