繁体   English   中英

如何从文件的字节数组中获取文件名?

[英]How to get a file name from a file's byte array?

我有字节代表我通过网络传输的文件。 除了在文件系统上手动重建文件外,如何从文件中获取信息,如getName(),getPath()等?

换一种说法:

  1. 我从机器A上的文件开始
  2. 我使用FileUtils将文件转换为字节数组
  3. 我通过网络将该文件传输到机器B.
  4. 在机器B上,我想将该byte []重建为一个文件并运行getName()等方法

以下不起作用

  1. (文件)字节 - >不转换
  2. ((File)((Object)bytes))) - >不转换

我真的不想在filesytem上创建一个新的临时文件,虽然我知道有可用的静态File.createTemp。 我宁愿把它保存在内存中,从byte []数组构造一个新的File对象,获取我需要的信息并完成。

实际上,更好的是一个将采用byte []的API,并通过解析这些位直接获取文件名。

FileUtils.readFileToByteArray返回的byte[]只是文件内容,没有别的。

您应该创建自己的Serializable类,其中包括两个字段:文件内容的byte[]和其他所需的java.io.File 然后,将类序列化/反序列化为byte[] ,并将其传输。

文件内容及其名称是两个独立且独立的东西。 虽然特定文件格式可以具有元数据以在内容中存储名称(类似于例如MP3的ID3标签),但是在典型文件中,无法从byte [] contents知道名称。 即使,它也是来自远程机器的名称,在目标平台上可能是无效的。

如果您需要名称,则需要单独传输。

正如其他人已经正确说明的那样,FileUtils会为您提供文件的内容。

除了文件内容之外,您还要传输文件元数据(文件名/路径名,创建/修改/访问时间,所有权,权限,大小和(可能)校验和)。 一种方法是将文件放入容器(tar,shar,zip等),它提供文件元数据和文件内容。 或者您可以使用传输此元数据的文件传输协议。

您也可以创建自己的协议,以便使用文件Bytes Mine发送信息,如下所示

file Name然后分隔符然后file Path然后分隔符然后file bytes

separator应该是不能用作文件路径的fileName的字符(即|,:,&...)

deassemble在以相反的顺序接收客户端deassemble字节,并提取发送的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM