PlainCodec.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Исходный код среды исполнения ПВТ-ОО.

    Этот исходный код является частью проекта ПВТ-ОО.

    Copyright © 2021 Малик Разработчик

    Это свободная программа: вы можете перераспространять её и/или
    изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она может быть полезна,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <http://www.gnu.org/licenses/>.
*/

package platform.independent.streamformat.text.plain;

import avt.io.*;
import avt.io.charset.*;
import avt.io.extension.*;
import platform.independent.streamformat.*;
import platform.independent.streamformat.text.*;

public class PlainCodec(Object, TextCodec)
{
    private String fldText;

    public () {  }

    public void loadFromDataStream(DataInputStream stream) throws IOException { loadFromDataStream(stream, (CharDecoder) null); }

    public void loadFromDataStream(DataInputStream stream, CharDecoder decoder) throws IOException {
        if(stream == null)
        {
            throw new NullPointerException("аргумент stream равен нулевой ссылке");
        }
        LimitedSizeExtension lse = (LimitedSizeExtension) stream.getExtension(LimitedSizeExtension.class);
        if(lse == null)
        {
            throw new InvalidStreamException("аргумент stream не поддерживает расширение LimitedSizeExtension");
        }
        if(decoder == null) decoder = Charset.getDefault().newDecoder();
        byte[] buffer = new byte[(int) Long.max(0L, Long.min(lse.available(), Int.MAX_VALUE))];
        int length = stream.read(buffer);
        fldText = length <= 0 ? "" : new String(decoder.decode(buffer, 0, length));
    }

    public void saveToDataStream(DataOutputStream stream) throws IOException { saveToDataStream(stream, (CharEncoder) null); }

    public void saveToDataStream(DataOutputStream stream, CharEncoder encoder) throws IOException {
        if(stream == null)
        {
            throw new NullPointerException("аргумент stream равен нулевой ссылке");
        }
        String text = fldText;
        if(text == null)
        {
            throw new EmptyAdapterException("адаптер пуст");
        }
        if(encoder == null) encoder = Charset.getDefault().newEncoder();
        stream.write(encoder.encode(text.toCharArray()));
    }

    public void setText(String text) throws InvalidDataFormatException, UnsupportedDataException { fldText = text; }

    public void clear() { fldText = null; }

    public boolean isEmpty() { return fldText == null; }

    public String getText() { return fldText; }
}