gpt4 book ai didi

java - Xodus VFS 无法保存字节

转载 作者:行者123 更新时间:2023-12-02 09:13:59 25 4
gpt4 key购买 nike

下面代码的问题是VFS似乎无法持久化字节数组。当 Xodus VFS 写入零字节时:

  @Override
public FileModel put(
String appId, String namespace, String name, InputStream is) {
final FileModel[] createdFile = {null};
final Environment env = manager.getEnvironment(xodusRoot, appId);
final VirtualFileSystem vfs = new VirtualFileSystem(env);
env.executeInTransaction(
new TransactionalExecutable() {
@Override
public void execute(@NotNull final Transaction txn) {
final File file = vfs.openFile(txn, name, true);;
try {
byte[] ba = ByteStreams.toByteArray(is);
LOG.info("Byte array size: " + ba.length); // Size: 3466
vfs.writeFile(txn, file).write(ba, 0, ba.length);
} catch (IOException e) {
e.printStackTrace();
}
long fileSize = vfs.getFileLength(txn, file);
LOG.info("File Size: " + fileSize); // Size: 0 <----
createdFile[0] = new FileModel();
createdFile[0].setDescriptor(file.getDescriptor());
createdFile[0].setName(name);
createdFile[0].setCreated(file.getCreated());
createdFile[0].setModified(file.getLastModified());
}
});
vfs.shutdown();
return createdFile[0];
}

这是日志:

[qtp1007568224-16] WARN jetbrains.exodus.io.FileDataWriter - Can't open directory channel. Log directory fsync won't be performed.
[qtp1007568224-16] WARN jetbrains.exodus.io.FileDataWriter - Can't open directory channel. Log directory fsync won't be performed.
[qtp1007568224-16] INFO jetbrains.exodus.env.EnvironmentImpl - Exodus environment created: \tmp\xodus\master
[qtp1007568224-16] WARN jetbrains.exodus.io.FileDataWriter - Can't open directory channel. Log directory fsync won't be performed.
[qtp1007568224-16] INFO jetbrains.exodus.env.EnvironmentImpl - Exodus environment created: \tmp\xodus\ab5b92099ad443259b4deaf8df6facc4
[qtp1007568224-16] INFO com.backend.repository.jee.JeeXodusVFSRepository - Byte array size: 3466
[qtp1007568224-16] INFO com.backend.repository.jee.JeeXodusVFSRepository - File Size: 0
[qtp1007568224-16] INFO com.backend.resource.jee.JeeFileServerResource - File size=3466; File.created=1575274836678; File.name="index.html"; File.modified=1575274836678; File.etag=<null>; File.descriptor=261; File.url=<null>

最佳答案

方法vfs.writeFile(txn, file)返回一个OutputStream实例,应该关闭该实例以保存写入的数据。

关于java - Xodus VFS 无法保存字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59152765/

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