gpt4 book ai didi

Java 8 Base64 流包装器吃掉最后两个字符?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:48 25 4
gpt4 key购买 nike

我有以下代码:

public static String encode(Object object)
{
final String result;

try (ByteArrayOutputStream bOut = new ByteArrayOutputStream();
Output output = new Output(bOut))
{
KRYO.writeObject(output, object);
output.flush();
result = Base64.getUrlEncoder().encodeToString(bOut.toByteArray());
} catch (IOException e)
{
// Do nothing, should never happen!
throw new RuntimeException("MEGA FAIL");
}

return result;
}

public static String encodeTest(Object object)
{
final String result;

try (ByteArrayOutputStream bOut = new ByteArrayOutputStream();
OutputStream base64Out = Base64.getUrlEncoder().wrap(bOut);
Output output = new Output(base64Out))
{
KRYO.writeObject(output, object);
output.flush();
result = bOut.toString();
} catch (IOException e)
{
// Do nothing, should never happen!
throw new RuntimeException("MEGA FAIL");
}

return result;
}

测试:

String test = "asdf";
System.out.println(encode(test));
System.out.println(encodeTest(test));

给出输出(使用 kryo 记录器):

00:10 TRACE: [kryo] Write: asdf
00:10 TRACE: [kryo] Object graph complete.
YXNk5g==
00:10 TRACE: [kryo] Write: asdf
00:10 TRACE: [kryo] Object graph complete.
YXNk

那么我的代码有错误吗?

我是否滥用了包装器?

是不是kryo的错误(用3.0.3和4.0.0版本测试)?

最佳答案

根据 Base64.Encoder.wrap() 的文档,您需要在完成后关闭流:

It is recommended to promptly close the returned output stream after use, during which it will flush all possible leftover bytes to the underlying output stream.

在编码器流关闭后调用 bOut.toString() 将解决问题:

public static String encodeTest(Object object)
{
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
try (OutputStream base64Out = Base64.getUrlEncoder().wrap(bOut);
Output output = new Output(base64Out))
{
KRYO.writeObject(output, object);
} catch (IOException e)
{
// Do nothing, should never happen!
throw new RuntimeException("MEGA FAIL");
}

return bOut.toString();
}

关于Java 8 Base64 流包装器吃掉最后两个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39713097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com