求帮忙,下面Java函数,在Delphi中怎么实现,弄了好久,两边就是不兼容?

-阿尔克- 2021-02-18 10:19:03
/**
* 将文件转换成byte数组
* @param
* @return
*/
public static byte[] File2byte(File tradeFile){
byte[] buffer = null;
try
{
FileInputStream fis = new FileInputStream(tradeFile);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1)
{
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
return buffer;
}
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不要那么复杂:
uses System.Generics.Collections, System.IOUtils;

var
buf: TArray<byte>;
//...
buf := TFile.ReadAllBytes(文件名);

Java的一大特点是把简单问题复杂化(复杂问题也没简单多少)~
doloopcn 2021-02-19
  • 打赏
  • 举报
回复
function FileToByte(FileNamePath:String):TByteArray;
var
aFileStream: TMemoryStream;
begin
aFileStream:= TMemoryStream.Create;
aFileStream.LoadFromFile(FileNamePath);
aFileStream.Position := 0;
aFileStream.ReadBuffer(Result,aFileStream.Size); //你要求好像是1024,那就把aFileStream.Size改为1024测试一下
try
aFileStream.Free;
except
end;
end;
  • 打赏
  • 举报
回复
你们想多了,跟1024没关系,byte[] b = new byte[1024];就是一个临时缓冲区,因为它的两个stream之间没有copy方法,只能借助临时缓冲区读写进行复制,而之所以要用两个stream,也是因为FileInputStream就没有toByteArray方法,所以必须:
从FileInputStream读入到临时缓冲区
写临时缓冲区到ByteArrayOutputStream
调用ByteArrayOutputStream.toByteArray写到一个字节数组
返回字节数组
总之,java这套设计不但繁琐,而且效率低下,好像老学究设计的,为自己的井井有条而自鸣得意~
绍兴老鼠 2021-02-19
  • 打赏
  • 举报
回复
var Fs, FsTemp: TFileStream; Byte_1024: array[0..1023] of Byte; begin Fs := TFileStream.Create('1.txt', fmOpenRead); with Fs do begin Position := 0; while Position < 1024 do begin Read(Byte_1024[Position], 1); if Position=Size then begin Break; end; end; end; Fs.Free; end; 我也来凑热闹下,没有写错误跳出~

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧