[英]How to generate a binary blob object in java of a specific size?
我正在尝试构建一个不透明的二进制Blob,它使用任何垃圾内容/随机内容进行编码,并且尝试以某种方式进行编码,以便我可以指定要生成的数据Blob的大小,以Kb为单位。
它的目的是对支持blob数据类型(例如C *)的DB应用程序的写吞吐量进行基准测试。 Blob不必是唯一的,因此它可以被构造一次,并且只需重新使用它即可避免由于GC和对象创建而导致客户端延迟。
我天真地尝试使用ByteBuffer.allocateDirect(bSize)
以为我可以使用它将从内存中提取的任何垃圾,但是我怀疑这种方法是否有效。
关于如何实现这一目标的任何建议?
如果您使用的是Linux,此命令行小技巧将快速创建虚拟文件:
dd if=/dev/zero of=FileName bs=1024 count=1000
count * bs
=文件大小
然后:
String sql = "INSERT INTO table (blob) VALUES (?)";
PreparedStatement stmt = conn.prepareStatement(sql);
File blob = new File("path_to_FileName");
FileInputStream fis = new FileInputStream(blob);
stmt.setBinaryStream(1, fis, (int) blob.length());
stmt.execute();
如果需要随机数据,可以使用Random.nextBytes(byte []);。 但是,此类系统很少关心内容,因此您只能使用全零。
byte[] blob = new byte[byteCount];
// optionally
// new Random().nextBytes(blob);
stmt.setBinaryStream(1, new ByteArrayInputStream(blob), blob.length);
进行InputStream的自定义实现以生成随机数据:
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
public class RandomInputStream extends InputStream
{
private int available;
private Random random = new Random();
public RandomInputStream(final int totalSize)
{
this.available = totalSize;
}
@Override
public int read() throws IOException
{
if(available == 0)
return -1;
--available;
return random.nextInt(256);
}
@Override
public int available() throws IOException
{
return available;
}
}
然后像往常一样使用它:
InputStream is = new RandomInputStream(1024*1024);
stmt.setBinaryStream(1, is, is.available());
这将是最快的解决方案。
byte [] blob =新的byte [byteCount];
//可选// new Random()。nextBytes(blob);
stmt.setBinaryStream(1,新的ByteArrayInputStream(blob),blob.length);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.