Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java png二进制文件的base64编码不';t工作JDK 11.0.3+;7 Eclipse 4.11.0_Java_Eclipse_Java 11 - Fatal编程技术网

Java png二进制文件的base64编码不';t工作JDK 11.0.3+;7 Eclipse 4.11.0

Java png二进制文件的base64编码不';t工作JDK 11.0.3+;7 Eclipse 4.11.0,java,eclipse,java-11,Java,Eclipse,Java 11,下面的代码 import java.util.Base64; try (final InputStream fis = new FileInputStream(new File("foobar.png"))) { final String str = Base64.getEncoder().encodeToString(fis.readAllBytes()); System.out.println("+++" + str + "+++"); // prints nothing

下面的代码

import java.util.Base64;

try (final InputStream fis = new FileInputStream(new File("foobar.png"))) {
    final String str = Base64.getEncoder().encodeToString(fis.readAllBytes());

    System.out.println("+++" + str + "+++"); // prints nothing!

    System.out.println("+++" + str.length() + "+++"); // +++34500+++
    System.out.println("+++" + str.isBlank() + "+++"); // +++false+++

    try (final OutputStream os = new FileOutputStream(new File("foobar.txt"))) {
        os.write(str.getBytes()); // empty file!
    }

    final String str2 = "foobar";
    try (final OutputStream os2 = new FileOutputStream(new File("foobar2.txt"))) {
        os2.write(Base64.getEncoder().encodeToString(str2.getBytes()); // This works!
    }
}
在第一次调用
System.out.println
时不打印任何内容。发生了什么?此外,当我使用base64编码字符串编写文件时,该文件是空的

当我不使用base64编码将所有读取字节写回文件系统时,两个文件相等。所以,没关系。但是编码有什么问题吗

foobar.png
在文件系统上有26 KiB

采用JDK 11.0.3+7

日食:2019-03(4.11.0)

解决方案
多亏了罗伯特。这显然只是我的Eclipse版本中的一个显示问题。

很可能是在类似Eclipse的IDE中执行此Java代码

例如,Eclipse有一个错误,即没有打印太长的行:/

在您的例子中,base64编码的字符串有34500个字符,足够大,足以触发此错误

在Windows 10 64位上使用OpenJDK 1.0.7的最新版本Eclipse(2020-03)似乎能够显示更多字符(例如,在快速测试中,可以看到一行67000个字符)


但是不要忘记在Eclipse设置(运行/调试->控制台)中增加
控制台缓冲区大小。

很可能是在类似Eclipse的IDE中执行此Java代码

例如,Eclipse有一个错误,即没有打印太长的行:/

在您的例子中,base64编码的字符串有34500个字符,足够大,足以触发此错误

在Windows 10 64位上使用OpenJDK 1.0.7的最新版本Eclipse(2020-03)似乎能够显示更多字符(例如,在快速测试中,可以看到一行67000个字符)


但是不要忘记在Eclipse设置(运行/调试->控制台)中增加
控制台缓冲区大小。

您是如何验证文件是否为空的?可能使用的文本编辑器也有同样的问题?使用十六进制编辑器,以确保它不是一个显示问题。无论如何,您都应该将OpenJDK升级到最新版本11.0.7。根据我的经验,11.0.3有一些严重的错误,例如关于TLS连接。@Robert:Thx,默认的Eclipse文本编辑器也有同样的问题。所以,Eclipse中的显示问题。您是如何验证文件是否为空的?可能使用的文本编辑器也有同样的问题?使用十六进制编辑器,以确保它不是一个显示问题。无论如何,您都应该将OpenJDK升级到最新版本11.0.7。根据我的经验,11.0.3有一些严重的错误,例如关于TLS连接。@Robert:Thx,默认的Eclipse文本编辑器也有同样的问题。所以,Eclipse中的显示问题。