gpt4 book ai didi

java - 在写入文件时使用 reSTLet 流式传输文件

转载 作者:行者123 更新时间:2023-12-01 14:03:55 25 4
gpt4 key购买 nike

我正在尝试通过 Java 库 ReSTLet 流式传输文件。但文件在流式传输时会被写入。这是它应该如何工作的。

我创建了一个视频和一个音频文件,然后将这两个文件合并为一个,此步骤需要相当长的时间。因此,在创建新文件时,我想将文件流式传输到浏览器,这样我就可以观看视频,而无需等待 10 分钟。

目前我可以使用 FileInputStream 读取文件 block ,但我不知道如何将文件提供给浏览器。有任何想法吗?

是否可以使用 ReSTLet 提供动态文件?

提前谢谢,抱歉我的英语不好^^

ZimTis

[更新]

感谢 Jerome Louvel,我能够在创建 mp3 文件时播放该文件:

public class RestletStreamTest extends ServerResource {

private InputRepresentation inputRepresentation;
public FileInputStream fis;

@Get
public InputRepresentation readFile() throws IOException {
final File f = new File("/path/to/tile.mp3");
fis = new FileInputStream(f);

inputRepresentation = new InputRepresentation(new InputStream() {
private boolean waited = false;

@Override
public int read() throws IOException {
waited = false;

// read the next byte of the FileInputStream, when reaching the
// end of the file, wait for 2 seconds and try again, in case
// the file was not completely created yet
while (true) {
byte[] b = new byte[1];

if (fis.read(b, 0, 1) > 0) {
return b[0] + 256;
} else {
if (waited) {
return -1;
} else {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
waited = true;
}
}
}
}

}, MediaType.AUDIO_MPEG);

return inputRepresentation;
}
}

虽然有点生硬,但是很管用,以后会完善。当我更改代码以尝试流式传输视频时,播放器会读取视频的所有字节,然后开始播放并再次读取所有字节。视频播放完毕后,当我点击播放按钮时,什么也没有发生。 ReSTLet 引发超时,然后视频再次开始播放。我尝试了 .mp4 和 .flv 文件,但总是得到相同的结果。

我不确定是ReSTLet还是播放器的问题。我在Firefox中使用VLC播放器,并在Chrome中尝试了标准的html5播放器。但Chrome播放器甚至没有开始播放。

我是不是错过了什么?还是只是播放器的问题?

最佳答案

我建议您尝试返回包装 FileInputStream 的 InputRepresentation 实例,或直接返回包装新创建的文件的 FileRepresentation。

关于java - 在写入文件时使用 reSTLet 流式传输文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com