我需要编写将打开二进制文件的C ++代码,并编写5 MB的' 1'在它。
目前我的代码是:
#define BYTES_BUFFER_SIZE_5MB (1024*1024*5)
static char buffer[BYTES_BUFFER_SIZE_5MB];
memset(buffer, 0xff, BYTES_BUFFER_SIZE_5MB);
ofstream myFile ("data.bin", ios::out | ios::binary);
myFile.write(buffer, BYTES_BUFFER_SIZE_5MB);
是否有类似memset
的方法来写入文件,所以我可以避免使用缓冲区?
答案 0 :(得分:2)
我认为我们可以使用流操纵器在一行中执行此操作:
int
setw
默认情况下写出0xFF 这样我们就没有涉及缓冲区了。唯一的风险是如果你想写很多字节,你可能会在setw
的电话上溢出$sql="SELECT image,image1,image2,image3,image4,image5 FROM `app_places` where place_id='".$place_id."' ";
$check= mysqli_query($conn, $sql);
$rowcount=mysqli_num_rows($check);
//var_dump($rowcount);
if($rowcount<=0)
{
$minfo = array("success"=>'false',"msg"=>'invalid place_id');
$jsondata = json_encode($minfo);
print_r($jsondata);
exit();
}
else
{
$data = array();
while ($row = mysqli_fetch_array($check,MYSQLI_NUM))
{
$data[] = $row;
}
。
答案 1 :(得分:0)
您可以使用较小的缓冲区并使用JButton jbtnStart = new JButton("Start");
JButton jbtnStop = new JButton("Stop");
循环多次写入。
如果你必须写5Mb,你可以做类似的事情
for
注意 #define BYTES_SIZE_5MB (5242880) // Bathsheba comment have to be considered
#define BUFFER_SIZE (1024) // Chunk size to be written (this is an arbitrary amount)
static char buffer[BUFFER_SIZE];
ofstream myFile ("data.bin", ios::out | ios::binary);
int i, repetitions = BYTES_SIZE_5MB / BUFFER_SIZE;
memset(buffer, 0xff, BUFFER_SIZE);
for (i=0; i < repetitions; ++i)
myFile.write(buffer, BYTES_BUFFER_SIZE_5MB);
myFile.close();
方法可能变得非常慢,最好选择更大的块大小,这样您就可以减少write()
次呼叫,这提高了程序的速度
答案 2 :(得分:0)
它并不简单,但您可以使用memory-mapped files。它们完全按照您的要求提供 - 您可以将文件写入,就像您正在写入内存一样。
每个(流行的)操作系统都有不同的API,但有一些库提供便携式支持。