Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Основной ввод-вывод
Раздел: Потоки ввода-вывода
Потоки байтов
Домашняя страница > Существенные Классы > Основной ввод-вывод

Потоки байтов

Программы используют потоки байтов, чтобы выполнить ввод и вывод 8-разрядных байтов. Все классы потока байтов происходят от InputStream и OutputStream.

Есть много классов потока байтов. Чтобы демонстрировать, как потоки байтов работают, мы сосредоточимся на потоках байтов файлового ввода-вывода, FileInputStream и FileOutputStream. Другие виды потоков байтов используются почти таким же способом; они отличаются, главным образом, по способу, которым они создаются.

Используя Потоки байтов

Мы исследуем FileInputStream и FileOutputStream исследуя пример программы называется CopyBytes, который использует потоки байтов, чтобы скопировать xanadu.txt, один байт за один раз.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
    public static void main(String[] args) throws IOException {

        FileInputStream in = null;
        FileOutputStream out = null;

        try {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }
}

CopyBytes проводит большую часть его времени в простом цикле, который читает входной поток и пишет поток вывода, один байт за один раз, как показано в следующем числе.

Простой ввод и вывод потока байтов.

Простой ввод и вывод потока байтов.

Заметьте это read() возвраты int значение. Если ввод является потоком байтов, почему не делает read() возвратите a byte значение? Используя a int поскольку тип возврата позволяет read() использовать-1, чтобы указать, что это достигло конца потока.

Всегда Близкие Потоки

Закрытие потока, когда это больше не необходимо, очень важно — настолько важный что CopyBytes использование a finally блокируйте, чтобы гарантировать, что оба потока будут закрыты, даже если ошибка произойдет. Эта практика помогает избежать серьезных утечек ресурсов.

Одна возможная ошибка - это CopyBytes было неспособно открыть один или оба файла. Когда это происходит, потоковое соответствие переменной файлу никогда не изменяется от его начальной буквы null значение. Именно поэтому CopyBytes удостоверяется, что каждая потоковая переменная содержит ссылку на объект перед вызовом close.

Если не Использовать Потоки байтов

CopyBytes походит на нормальную программу, но она фактически представляет своего рода низкоуровневый ввод-вывод, которого следует избежать. С тех пор xanadu.txt содержит символьные данные, лучший подход должен использовать символьные потоки, как обсуждено в следующем разделе. Есть также потоки для более сложных типов данных. Потоки байтов должны только использоваться для самого примитивного ввода-вывода.

Итак, почему разговор о потоках байтов? Поскольку все другие потоковые типы основываются на потоках байтов.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Потоки ввода-вывода
Следующая страница: Символьные Потоки