簡體   English   中英

如何在特定大小的Java中生成二進制Blob對象?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM