[英]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.