PlainCodec.avt

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

/*
    Реализация среды исполнения языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

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

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

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

    Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://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, OutputAdapter, CharsetOutputAdapter, InputAdapter, CharsetInputAdapter, TextEncoder, MutableDataHolder, DataHolder, TextDecoder)
{
    private String fldText;

    public () {  }

    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(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "stream" }));
        }
        String text = fldText;
        if(text == null)
        {
            throw new EmptyAdapterException(platform.independent.streamformat.package.getResourceString("empty-adapter"));
        }
        if(encoder == null) encoder = Charset.getDefault().newEncoder();
        stream.write(encoder.encode(text.toCharArray()));
    }

    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(String.format(avt.lang.package.getResourceString("null-pointer.argument"), new Object[] { "stream" }));
        }
        LimitedSizeExtension sizeable = (LimitedSizeExtension) stream.getExtension(LimitedSizeExtension.class);
        if(sizeable == null)
        {
            throw new InvalidStreamException(String.format(
                platform.independent.streamformat.package.getResourceString("invalid-stream.input.unsupported-extension"), new Object[] { LimitedSizeExtension.class.simpleName }
            ));
        }
        long size = sizeable.available();
        if(size < 0 || size > Int.MAX_VALUE)
        {
            throw new InvalidStreamException(platform.independent.streamformat.package.getResourceString("invalid-stream.input.size-too-large"));
        }
        int length = (int) size;
        byte[] buffer = new byte[length];
        if((length = stream.read(buffer)) <= 0)
        {
            fldText = "";
            return;
        }
        char[] text = (decoder != null ? decoder : Charset.getDefault().newDecoder()).decode(buffer, 0, length);
        fldText = new String(text);
    }

    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; }
}