我一直在尝试解决链接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;
}
答案 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);
}