[英]Converting file to byte array and transmitting it with UDP. How to get file name on server from this array of bytes?
[英]How to get a file name from a file's byte array?
我有字节代表我通过网络传输的文件。 除了在文件系统上手动重建文件外,如何从文件中获取信息,如getName(),getPath()等?
换一种说法:
以下不起作用
我真的不想在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.