Kwert-soft.ru

IT Софт для ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java inputstream read

Класс InputStream

Базовый класс InputStream представляет классы, которые получают данные из различных источников:

  • массив байтов
  • строка (String)
  • файл
  • канал (pipe): данные помещаются с одного конца и извлекаются с другого
  • последовательность различных потоков, которые можно объединить в одном потоке
  • другие источники (например, подключение к интернету)

Для работы с указанными источниками используются подклассы базового класса InputStream:

BufferedInputStream Буферизированный входной поток ByteArrayInputStream Позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока. DataInputStream Входной поток, включающий методы для чтения стандартных типов данных Java FileInputStream Для чтения информации из файла FilterInputStream Абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства. InputStream Абстрактный класс, описывающий поток ввода ObjectInputStream Входной поток для объектов StringBufferInputStream Превращает строку (String) во входной поток данных InputStream PipedInputStream Реализует понятие входного канала. PushbackInputStream Входной поток, поддерживающий однобайтовый возврат во входной поток SequenceInputStream Сливает два или более потока InputStream в единый поток

  • int available() — возвращает количество байтов ввода, доступные в данный момент для чтения
  • close() — закрывает источник ввода. Следующие попытки чтения передадут исключение IOException
  • void mark(int readlimit) — помещает метку в текущую точку входного потока, которая остаётся корректной до тех пор, пока не будет прочитано readlimint байт
  • boolean markSupported() — возвращает true, если методы mark() и reset() поддерживаются потоком
  • int read() — возвращает целочисленное представление следующего доступного байта в потоке. При достижении конца файла возвращается значение -1
  • int read(byte[] buffer) — пытается читать байты в буфер, возвращая количество прочитанных байтов. По достижении конца файла возвращает значение -1
  • int read(byte[] buffer, int byteOffset, int byteCount) — пытается читать до byteCount байт в buffer, начиная с смещения byteOffset. По достижении конца файла возвращает -1
  • reset() — сбрасывает входной указатель в ранее установленную метку
  • long skip(long byteCount) — пропускает byteCount байт ввода, возвращая количество проигнорированных байтов

Как преобразовать InputStream в строку

  1. Using IOUtils.toString (Apache Utils):
  2. Using CharStreams (guava)
  3. Using Scanner (JDK)
    символ «А» является символом начала текста, таким образом вызов next() вернет сразу всю строку.
  4. Using Stream Api (Java 8). Warning: This solution convert different linebreaks (like rn) to n.
  5. Using parallel Stream Api (Java 8). Warning: This solution convert different linebreaks (like rn) to n.
  6. Using InputStreamReader and StringBuilder (JDK)
  7. Using StringWriter and IOUtils.copy (Apache Commons)
  8. Using ByteArrayOutputStream and inputStream.read (JDK)
  9. Using BufferedReader (JDK). Warning: This solution convert different linebreaks (like nr) to line.separator system property (for example, in Windows to «rn»).
  10. Using BufferedInputStream and ByteArrayOutputStream (JDK)
  11. Using inputStream.read() and StringBuilder (JDK). Warning: This soulition has problem with Unicode, for example with Russian text (work correctly only with non-Unicode text)

Warning:
Solutions 4, 5 and 9 convert different linebreaks to one.
Soulution 11 can’t work correclty with Unicode text

BufferedInputStream

Буферизация ввода-вывода является удобным способом оптимизации производительности, позволяя заключить в оболочку любой поток класса InputStream.

У класса есть конструктор, где размер буфера устанавливается по умолчанию. Также можно использовать конструктор, где размер буфера устанавливается вручную. Рекомендуется использовать размеры буфера, кратные размеру страницы памяти, дисковому блоку и т.п. и может зависеть от принимающей операционной системы, объёма доступной памяти и конфигурации машины.

ByteArrayInputStream

Класс ByteArrayInputStream использует байтовый массив в качестве источника данных. У данного класса можно не вызывать метод close().

DataInputStream — Форматированное чтение из памяти

Для чтения байтовых данных (не строк) применяется класс DataInputStream. В этом случае необходимо использовать классы из группы InputStream.

Для преобразования строки в массив байтов, пригодный для помещения в поток ByteArrayInputStream, в классе String предусмотрен метод getBytes(). Полученный ByteArrayInputStream представляет собой поток InputStream, подходящий для передачи DataInputStream.

При побайтовом чтении символов из форматированного потока DataInputStream методом readByte() любое полученное значение будет считаться действительным, поэтому возвращаемое значение неприменимо для идентификации конца потока. Вместо этого можно использовать метод available(), который сообщает, сколько еще осталось символов.

Класс DataInputStream позволяет читать элементарные данные из потока через интерфейс DataInput, который определяет методы, преобразующие элементарные значения в форму последовательности байтов. Такие потоки облегчают сохранение в файле двоичных данных.

FileInputStream

Класс FileInputStream создаёт объект класса InputStream, который можно использовать для чтения байтов из файла.

  • FileInputStream (File file) — указывается объекта типа File
  • FileInputStream (FileDescriptor fd)
  • FileInputStream (String path) — указывается полное имя файла

При создании объект открывается для чтения. Класс переопределяет методы класса InputStream, кроме методов mark() и reset().

Для чтения байтов входного потока из файла используется конструкция:

PushbackInputStream

Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс PushbackInputStream представляет механизм «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий раз, не извлекая информации.

У класса есть дополнительный метод unread().

SequenceInputStream

Класс SequenceInputStream позволяет соединять вместе несколько экземпляров класса InputStream. Конструктор принимает в качестве аргумента либо пару объектов класса InputStream, либо интерфейс Enumeration.

Во время работы класс выполняет запросы на чтение из первого объекта класса InputStream и до конца, а затем переключается на второй. При использовании интерфейса работа продолжится по всем объектам класса InputStream. По достижении конца каждого файла, связанный с ним поток закрывается. Закрытие потока, созданного объектом класса SequenceInputStream, приводит к закрытию всех открытых потоков.

Читать еще:  Java jdbc connection

Java inputstream read

Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input.

Constructor Summary

Constructors

Constructor and Description
InputStream()

    Method Summary

    Methods

    Modifier and TypeMethod and Description
    intavailable()
    voidclose()voidmark(int readlimit)booleanmarkSupported()abstract intread()intread(byte[] b)intread(byte[] b, int off, int len)voidreset()longskip(long n)

    Methods inherited from class java.lang.Object

    Constructor Detail

    InputStream

    Method Detail

    A subclass must provide an implementation of this method.

    If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b .

    The first byte read is stored into element b[0] , the next one into b[1] , and so on. The number of bytes read is, at most, equal to the length of b . Let k be the number of bytes actually read; these bytes will be stored in elements b[0] through b[ k -1] , leaving elements b[ k ] through b[b.length-1] unaffected.

    The read(b) method for class InputStream has the same effect as:

    This method blocks until input data is available, end of file is detected, or an exception is thrown.

    If len is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at end of file, the value -1 is returned; otherwise, at least one byte is read and stored into b .

    The first byte read is stored into element b[off] , the next one into b[off+1] , and so on. The number of bytes read is, at most, equal to len . Let k be the number of bytes actually read; these bytes will be stored in elements b[off] through b[off+ k -1] , leaving elements b[off+ k ] through b[off+len-1] unaffected.

    In every case, elements b[0] through b[off] and elements b[off+len] through b[b.length-1] are unaffected.

    The read(b, off, len) method for class InputStream simply calls the method read() repeatedly. If the first such call results in an IOException , that exception is returned from the call to the read(b, off, len) method. If any subsequent call to read() results in a IOException , the exception is caught and treated as if it were end of file; the bytes read up to that point are stored into b and the number of bytes read before the exception occurred is returned. The default implementation of this method blocks until the requested amount of input data len has been read, end of file is detected, or an exception is thrown. Subclasses are encouraged to provide a more efficient implementation of this method.

    The skip method of this class creates a byte array and then repeatedly reads into it until n bytes have been read or the end of the stream has been reached. Subclasses are encouraged to provide a more efficient implementation of this method. For instance, the implementation may depend on the ability to seek.

    available

    Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not. It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.

    A subclass’ implementation of this method may choose to throw an IOException if this input stream has been closed by invoking the close() method.

    The available method for class InputStream always returns 0 .

    This method should be overridden by subclasses.

    close

    The close method of InputStream does nothing.

    The readlimit arguments tells this input stream to allow that many bytes to be read before the mark position gets invalidated.

    The general contract of mark is that, if the method markSupported returns true , the stream somehow remembers all the bytes read after the call to mark and stands ready to supply those same bytes again if and whenever the method reset is called. However, the stream is not required to remember any data at all if more than readlimit bytes are read from the stream before reset is called.

    Marking a closed stream should not have any effect on the stream.

    The mark method of InputStream does nothing.

    reset

    The general contract of reset is:

    • If the method markSupported returns true , then:
      • If the method mark has not been called since the stream was created, or the number of bytes read from the stream since mark was last called is larger than the argument to mark at that last call, then an IOException might be thrown.
      • If such an IOException is not thrown, then the stream is reset to a state such that all the bytes read since the most recent call to mark (or since the start of the file, if mark has not been called) will be resupplied to subsequent callers of the read method, followed by any bytes that otherwise would have been the next input data as of the time of the call to reset .
    • If the method markSupported returns false , then:
      • The call to reset may throw an IOException .
      • If an IOException is not thrown, then the stream is reset to a fixed state that depends on the particular type of the input stream and how it was created. The bytes that will be supplied to subsequent callers of the read method depend on the particular type of the input stream.

    The method reset for class InputStream does nothing except throw an IOException .

    markSupported

    • Overview
    • Package
    • >Java™ Platform
      Standard Ed. 7
    • Summary:
    • Nested |
    • Field |
    • Constr |
    • Method
    • Detail:
    • Field |
    • Constr |
    • Method

    Submit a bug or feature
    For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
    Copyright © 1993, 2018, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

    Java InputStream tutorial

    Java InputStream tutorial shows how to work with InputStream class in Java.

    is a flow of data from a source or into a destination. A good metaphor for Java streams is water flowing from a tap into a bathtub and later into a drainage. InputStream and OutputStream are abstractions over low-level access to data, such as C file pointers.

    Java InputStream

    InputStream is a source for reading data. A stream can represent various kinds of sources, including disk files, devices, other programs, and memory arrays.

    Streams support many different types of data, including simple bytes, primitive data types, localized characters, and objects.

    Java InputStream subclasses

    InputStream is an abstract class; it is a superclass for all classes representing an input stream of bytes, including AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , ObjectInputStream , PipedInputStream , and SequenceInputStream .

    Java InputStream close

    The FileInputStream’s close() method closes the input stream and releases any system resources associated with this stream. In our examples we use try-with-resources statement, which ensures that each resource is closed at the end of the statement.

    Java InputStream read

    InputStream reads bytes with the following read methods :

    • read(byte[] b) — reads up to b.length bytes of data from this input stream into an array of bytes.
    • read(byte[] b, int off, int len) — reads up to len bytes of data from this input stream into an array of bytes.
    • read() — reads one byte from the file input stream.

    Java InputStream read text

    The following example shows how to read a text file with InputStream .

    In the example, we use this text file.

    The text file is read with FileInputStream , InputStreamReader , and BufferedReader .

    FileInputStream is a specialization of the InputStream for reading bytes from a file.

    InputStreamReader is a bridge from byte streams to character streams: it reads bytes and decodes them into characters using a specified charset.

    BufferedReader reads text from a character-input stream, buffering characters for efficient reading of characters, arrays, and lines.

    The data is read by lines from a buffered reader.

    Java InputStream read bytes

    The read methods of InputStream read bytes.

    The example reads bytes from a PNG image and prints the bytes in hexadecimal format to the console.

    We use FileInputStream to read bytes from an image file.

    With the read() method, we read the bytes into the array of bytes.

    We go through the array and print the bytes to the console in hexadecimal format.

    This is a partial sample output of the example.

    Java InputStream read from URL

    InputStream allows to read data from a URL source.

    The example opens an InputStream to a web page and reads its data.

    An InputStream to a URL is created with openStream() method.

    This is the output.

    Java InputStream read deserialized data

    ObjectInputStream reads serialized data previously written using ObjectOutputStream .

    This is the Country bean. We are going to serialize and deserialize a list of countries.

    The example serializes a list of objects.

    A list of countries is written to the ObjectOutputStream .

    We use the ObjectInputStream to read serialized data.

    Java InputStream read sequence of streams

    SequenceInputStream represents a sequence of input streams. It allows to read from multiple of ordered streams.

    The example reads from three FileInputStreams .

    We define three input streams and these streams are placed into SequenceInputStreams .

    We read the data from the streams with read() .

    Потоки ввода, InputStream

    Существуют две параллельные иерархии классов ввода : InputStream и Reader. Класс Reader введен в последних версиях Java. В данной статье рассматривается вопрос использования потока байтового ввода InputStream, иерархия которого представлена на следующем рисунке.

    Поток Stream— это абстрактное понятие источника или приёмника данных, которые способны обрабатывать информацию. Есть два типа потоков: байтовые и символьные. В некоторых ситуациях символьные потоки более эффективны, чем байтовые. Классы, производные от базовых InputStream или Reader, имеют методы read() для чтения отдельных байтов или массива байтов.

    Входной поток InputStream

    Базовый класс InputStream — это абстрактный класс, определяющий входной поток данных, и является родителем для классов, получающих данные из различных источников : массив байтов, строки (String), файлы, каналы pipe, у которых одна из сторон является входом, а вторая сторона играет роль выхода, и т.д. Методы класса InputStream при возникновении ошибки вызывают исключение IOException.

    Методы класса InputStream :

    МетодОписание
    boolean readBoolean()байт булевого однобайтового значения
    byte readByte()байт одного байта
    char readChar()байт значения char
    double readDouble()байт восьмибайтового значения double
    float readFloat()чтение четырехбайтового значения float
    int readInt()чтение целочисленного значения int
    long readLong()чтение значения long
    short readShort()чтение значения short
    String readUTF()чтение строки в кодировке UTF-8
    int skipBytes(int n)пропуск при чтении n байтов

    Пример чтения из бинарного файла с использованием DataInputStream

    ObjectInputStream

    Класс ObjectInputStream отвечает за чтение ранее сериализованных данных из потока. В конструкторе он принимает ссылку на поток ввода:

    Основные методы класса ObjectInputStream :

    Ссылка на основную публикацию
    Adblock
    detector