【问题标题】:It Is possible to get java objects directly from Encoded String rather than converting Encoded String into File and then read the file?是否可以直接从 Encoded String 获取 java 对象,而不是将 Encoded String 转换为 File 然后读取文件?
【发布时间】:2021-08-17 07:02:06
【问题描述】:

我的要求:

  1. 我正在从我的一个 REST Api 接收编码字符串 现在需要使用 Base64 解码器解码此编码字符串。
  2. 因为这包含我需要解码的文件,例如 Base64 到文件,这可以使用下面的链接发生,如果我只是将编码字符串下面的粘贴复制到下面的链接中,它会给我文件下载
  3. https://base64.guru/converter/decode/file
  4. 现在我的问题是,是否可以以某种方式直接将以下编码的字符串转换为 Java 对象,而不是将它们转换为文件。
  • 我的最终目标是从编码字符串中获取数据。

-----现在的流程是--------

EncodedString ==> 将 Base 64 转换为 CSV 文件并下载文件 ==> 使用 Java 读取 CSV 文件 ==>> Java 对象中可用的数据

----下面可以吗?-------

EncodedString ==> 将文件解码并转换为 Java 对象 ==>> Java 对象中可用的数据

编码字符串:

我尝试过的

package com.oracleerp;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

public class Zip {

    public static void main(String args[]) throws IOException {

        convertZipAndDownload();
    }

    private static void convertZipAndDownload() throws IOException {
        try {
            String str1 = "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";
            byte[] decodedImg = Base64.getDecoder().decode(str1.getBytes(StandardCharsets.UTF_8));
            Path destinationFile = Paths.get("/Users/as.asd/Documents/zip", "myImage1.zip");
            Files.write(destinationFile, decodedImg);
        } catch (Exception e) {
            System.out.println("Error :" + e.getMessage());
        }
    }
}

这可以很好地下载 zip,但我想在内存中完成所有这些操作而不做任何下载

【问题讨论】:

    标签: java base64 decode encode decoder


    【解决方案1】:

    是的,您可以使用 java.util.Base64 在 Java 中轻松地将 Base64 数据解码为 byte[],如下所示:

    String myBase64String = ...;
    byte[] decoded = Base64.getDecoder().decode(myBase64String);
    

    请注意,您可能需要将 getDecoder() 替换为 getMimeDecoder()getUrlDecoder(),具体取决于您使用的字符串编码的 Base64 类型。

    然后,如果您需要某种需要该数据作为输入的处理,您可以轻松创建一个InputStream,使用ByteArrayInputStream 提供该数据:

    InputStream in = new ByteArrayInputStream(decoded);
    

    但是,如果您的处理代码坚持采用 File 对象,那么您需要修改该代码以直接接受 InputStream(通常这很容易,因为大多数方法只是创建一个 FileInputStream并阅读,跳过该步骤并改用传入的InputStream)。

    【讨论】:

    • 感谢 Joachim Sauer。!我在下面尝试过,请检查 cmets 可以为下一步提供建议。请注意我的解码字符串会生成 zip 文件。
    • 我已经用 Programm 更新了问题我想读取内存字节中的 zip 文件 [] ==> Zip 文件 ==> 提取它 ==> 再次在这个里面提取 2 个 zip => 从中读取 CSV 文件他们都。所有这些我都想在内存中执行而不下载文件。
    • 只需从in 创建一个ZipInputStream 并继续像从文件中解压缩内容一样,在这一步之后从文件中解压缩没有区别。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2012-09-15
    • 2016-04-11
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多