powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / InputStream и OutputSTream
13 сообщений из 13, страница 1 из 1
InputStream и OutputSTream
    #38118379
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста почему в Java нет возможности записать в InputStream, а потом считать из него.
То есть есть два отдельных класса inputStream и OutputStream.
Как тогда реализовать такую возможность, как например в C#, где есть только один класс Stream, !в него можно записать , а когда необходимо, cчитать из него данные.
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118391
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonПодскажите пожалуйста почему в Java нет возможности записать в InputStream, а потом считать из него.
Почему "нет"? Есть.

osonТо есть есть два отдельных класса inputStream и OutputStream.

Это абстрактные классы. По идиологии почти интерфейсы.

osonКак тогда реализовать такую возможность, как например в C#, где есть только один класс Stream, !в него можно записать , а когда необходимо, cчитать из него данные.
А если мы пишем куда-то откуда считать потом не предоставляется возможным? Упс. Придётся добавить свойства CanRead/CanWrite и везде проверять их?

Если данные нужно записать в память, а потом прочитать - ByteArray(Input/Output)Stream к вашим услугам.
Если в файловую систему File(Input/Output)Stream. В чем проблема?
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118439
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это ByteArrayInputStream - то записанные в него данные в виде

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
byte[] bytes = ... //get byte array from somewhere.

InputStream input = new ByteArrayInputStream(bytes);

int data = input.read();
while(data != -1) {
  //do something with data

  data = input.read();
}
input.close(); 



будут храниться в поле
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118458
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonЕсли это ByteArrayInputStream - то записанные в него данные в виде

InputStream предназначен для чтения. При чем тут запись?

osonбудут храниться в поле
А надо где? В лесу? На лужайке? Объясни нормально задачу и проблему.
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118463
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно сохранил сообщение.

Если это ByteArrayInputStream - то записанные в него данные в виде

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
byte[] bytes = ... //get byte array from somewhere.

InputStream inputStream = new ByteArrayInputStream(bytes);

int data = input.read();
while(data != -1) {
  //do something with data

  data = input.read();
}
input.close(); 




будут храниться в поле

Код: java
1.
protected byte buf[];



Потом чтобы прочитать из этого инстанца inputStream надо сделать

Код: java
1.
2.
3.
4.
5.
6.
7.
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedOutputStream bufOutputStream=new BufferedOutputStream(outputStream,512);

while ((c = inputStream.read()) != -1) 
{
  bufOutputStream.write((char) c);
}



Причем у ByteArrayOutputStream тоже есть свой

Код: java
1.
protected byte buf[];



Как реализовать класс, чтобы можно было не создавать два отдельных класса InputStream и OutputStream, а иметь один класс Stream, в него записать, а когда надо из него считать?
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118478
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отнаследовавшись от ByteArrayOutputStream можно получить прямую ссылку на его буфер и использовать этот буфер в ByteArrayInputStream.
Можно ещё посмотреть в MappedByteBuffer, но он, вроде не реализует Stream-ы. Хотя можно найти готовые opensource обертки.
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118536
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonКак реализовать класс, чтобы можно было не создавать два отдельных класса InputStream и OutputStream, а иметь один класс Stream, в него записать, а когда надо из него считать?Во-первых - не два класса, а два объекта, во-вторых - есть NIO и, в частности, Buffer с разными наследниками под конкретные нужды.
Читаем про clear(), flip(), rewind(). Ну и про get()/put(). Про каналы и всё такое прочее.
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38118543
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМожно ещё посмотреть в MappedByteBuffer, но он, вроде не реализует Stream-ы.java.io позволяет получить канал, от которого рукой подать до (разных вариантов) буферов.
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38526302
JongShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

GXQJ5
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38526305
JongShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

зачем тут protected byte buf[] ведь массив где будут хранится данные указан в конструкторе ByteArrayInputStream(bytes); или я что то не так понял
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38527459
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать за пять минут, хотя смутно представляю какие профиты по сравнению с байт-стримами это даёт. Синтаксический сахар кокойты.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    class InputOutputStream {
        byte[] buf = new byte[100];
        final InputStream  inputStream  = new InputStream() {
            int pos;

            @Override
            public int read() throws IOException {
                return buf[pos++];
            }
        };
        final OutputStream outputStream = new OutputStream() {
            int pos;

            @Override
            public void write(int b) throws IOException {
                buf[pos++] = (byte) b;
            }
        };

        public InputStream input() {
            return inputStream;
        }

        public OutputStream output() {
            return outputStream;
        }
    }
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38527843
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonПодскажите пожалуйста почему в Java нет возможности записать в InputStream, а потом считать из него.
То есть есть два отдельных класса inputStream и OutputStream.
Как тогда реализовать такую возможность, как например в C#, где есть только один класс Stream, !в него можно записать , а когда необходимо, cчитать из него данные.

BlazkowiczПридётся добавить свойства CanRead/CanWrite и везде проверять их?


Ну такая штука у нас есть :) - и называется она File - CanRead/CanWrite
...
Рейтинг: 0 / 0
InputStream и OutputSTream
    #38528391
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonПодскажите пожалуйста почему в Java нет возможности записать в InputStream, а потом считать из него.
То есть есть два отдельных класса inputStream и OutputStream.
Как тогда реализовать такую возможность, как например в C#, где есть только один класс Stream, !в него можно записать , а когда необходимо, cчитать из него данные.
Исторически, это наследие поточных устройств типа клавиатуры и принтера. Поэтому они создавались
так как будто это труба в которую что-то втекает или вытекает. Это также удобно для работы с текстом.
Но если у тебя задача и писать и читать и рандомно позиционировать (последнее - вытекает) то тебе
нужен RandomAccessFile или просто твой собственный интерфейс но с реализацией byte[] или
RAF.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / InputStream и OutputSTream
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]