如何在 Java 中将 ByteBuffer 转换为 FileInputStream?

Posted

技术标签:

【中文标题】如何在 Java 中将 ByteBuffer 转换为 FileInputStream?【英文标题】:How to convert ByteBuffer to FileInputStream in Java? 【发布时间】:2015-03-12 07:40:04 【问题描述】:

我正在尝试将 xls 表导入 DB,因为当我上传文件时,上传的文件是 ByteBuffer 格式,我编写了一个读取为 FileInputStream 的逻辑。

现在我如何将此 ByteBuffer 转换为 FileInputStream

这是我的代码

        ByteBuffer fileBytes = (ByteBuffer) context.get("uploadedFile");
        String encoding = System.getProperty("file.encoding");
        String filename = Charset.forName(encoding).decode(fileBytes).toString();
        filename = filename.replaceAll("\\r", "");

我尝试使用 ByteArrayInputStream() 进行投射,但看起来它不起作用!

【问题讨论】:

这是一个相关问题的答案,可能对***.com/a/6603018/16959有帮助 【参考方案1】:
    将您的逻辑更改为使用 InputStream 而不是 FileInputStream. 您不在乎输入来自哪里。

    使用以下代码:

    ByteArrayInputStream bais = new ByteArrayInputStream(buffer.array(), buffer.position(), buffer.limit());
    

并将bais 传递给您现有的方法。

【讨论】:

看起来文件正在正确传递,但我认为 apache poi 无法读取它!我收到此错误 java.io.IOException: Unable to read entire header;读取 0 个字节;预计 512 字节 在不发布整个堆栈跟踪并向我们显示哪行代码抛出错误消息的情况下告诉我们错误消息并没有多大用处。你还没有发布你的“逻辑”的代码,但它几乎无限可能存在错误,而不是我在上面发布的单行代码。 感谢 EJP!现在问题已经解决了!只做 new ByteArrayInputStream(fileBytes.array()); 在 excel 导入案例中可以正常工作! PS:发布此内容,因为这可能有助于其他搜索解决方案... 这不是我提供的代码,一般情况下是行不通的。如果您发现此答案有用,则应考虑支持或接受它,或两者兼而有之。这也将帮助其他人寻找解决方案。

以上是关于如何在 Java 中将 ByteBuffer 转换为 FileInputStream?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kotlin 中将数据类转换为 ByteBuffer?

在 Java 中将字符串转换为 ByteBuffer

在 Java 中将 ByteBuffer 转换为字符串

在 Java 中转换 ByteBuffer 和 String 的问题

Java:转换 ByteBuffer 多维数组

Java:将 String 与 ByteBuffer 相互转换以及相关问题