Testdome-DecoratorStream Java

时间:2019-02-04 23:41:21

标签: java arrays

我一直在尝试解决链接here上的问题。我的解决方案在testdome上遇到了stackoverflow错误,尽管当我在IDE中运行它时它仍然可以工作。

我的解决方案:

private static boolean prefixused;

@Override
public void write(byte[] b, int off, int len) throws IOException {
    byte [] prefixarr = new byte [prefix.length()+b.length];

    if(prefixused)
        write(b, 0, b.length);
    else
        for(char c : prefix.toCharArray()){
            write((int)c);
        }

        write(prefixarr, 0, prefixarr.length);
        prefixused = true;
}

1 个答案:

答案 0 :(得分:1)

问题在于您正在调用write而不是stream.write(这是任务的一部分)。这样就不会抛出错误:

@Override
public void write(byte[] b, int off, int len) throws IOException {
    if(prefixused)
        stream.write(b, 0, b.length);
    else
        for(char c : prefix.toCharArray()){
            stream.write((int)c);
        }

    stream.write(b, off, len);
        prefixused = true;
}

但是此解决方案通过了所有测试并且更加优雅:

@Override
public void write(byte[] b, int off, int len) throws IOException {
    if (prefix != null) {
        stream.write(prefix.getBytes(StandardCharsets.UTF_8));
        prefix = null;
    }
    stream.write(b, off, len);
}