Java InputStream - работа с входными потоками в Java
<p>InputStream в Java является абстрактным классом, представляющим поток ввода данных. Он является основным строительным блоком для чтения данных из различных источников, таких как файлы, сетевые соединения и т. д. В Java, Input Stream является частью иерархии классов, связанных с потоками, в которую также входит OutputStream.</p>
<p>InputStream имеет несколько важных методов, которые используются для чтения данных из потока. Одним из наиболее распространенных методов является read(), который читает следующий байт или набор байт из потока и возвращает его в виде целого числа. Например, следующий код демонстрирует чтение байта из InputStream:</p>
<pre><code><pre><code>InputStream inputStream = new FileInputStream("file.txt");
int byteRead = inputStream.read();
if(byteRead != -1) {
System.out.println("Прочитан байт: " + byteRead);
} else {
System.out.println("Достигнут конец файла");
}
inputStream.close();
</code></pre></code></pre>
<p>В этом примере мы создаем объект FileInputStream, который представляет файл "file.txt". Затем мы вызываем метод read() для чтения следующего байта из потока. Если значение, возвращаемое read(), не равно -1, это означает, что байт успешно прочитан, и мы выводим его на экран. В противном случае, если возвращается -1, это означает, что мы достигли конца файла.</p>
<p>InputStream также предоставляет методы для более эффективного чтения данных. Например, метод read(byte[] buffer) читает данные из потока и сохраняет их в указанном буфере. Следующий пример демонстрирует это:</p>
<pre><code><pre><code>InputStream inputStream = new FileInputStream("file.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while((bytesRead = inputStream.read(buffer)) != -1) {
System.out.println("Прочитано " + bytesRead + " байт");
System.out.println("Данные: " + new String(buffer, 0, bytesRead));
}
inputStream.close();
</code></pre></code></pre>
<p>В этом примере мы создаем буфер размером 1024 байта и читаем данные из потока в этот буфер. Затем мы выводим количество прочитанных байт и сами данные на экран. Процесс продолжается, пока метод read() не вернет -1, что означает окончание потока.</p>
<p>InputStream также может быть использован для чтения данных из других источников, таких как сетевые соединения. Например, класс SocketInputStream расширяет InputStream и предоставляет методы для чтения данных из сокетов. Следующий пример демонстрирует чтение данных из сокета:</p>
<pre><code><pre><code>Socket socket = new Socket("localhost", 8080);
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
System.out.println("Прочитано " + bytesRead + " байт");
System.out.println("Данные: " + new String(buffer, 0, bytesRead));
inputStream.close();
socket.close();
</code></pre></code></pre>
<p>В этом примере мы создаем сокетное соединение с хостом "localhost" на порту 8080 и получаем его входной поток. Затем мы читаем данные из потока в буфер и выводим их на экран.</p>
<p>InputStream предоставляет множество других методов, таких как skip(), available() и mark(), которые позволяют более гибко управлять чтением данных из потока.</p>
<p>В заключение, InputStream в Java представляет собой универсальный способ чтения данных из различных источников. С его помощью вы можете читать данные из файлов, сетевых соединений и других источников. Что позволяет вам создавать мощные приложения для обработки данных.</p>