标签: buffer

java中未知长度的字节数组

我在java中构造一个字节数组,我不知道数组会有多长.

我想要一些像Java的StringBuffer这样的工具你可以调用.append(字节b)或.append(byte [] buf)并让它缓冲我的所有字节并在完成后返回给我一个字节数组.是否有一个类用于StringBuffer为字符串做什么?它看起来不像我正在寻找的ByteBuffer类.

谁有一个很好的解决方案?

java buffer byte

67
推荐指数
2
解决办法
6万
查看次数

为类型化内存视图分配内存的推荐方法是什么?

有关类型化内存视图Cython文档列出了三种分配给类型化内存视图的方法:

  1. 从原始C指针,
  2. 来自np.ndarray
  3. 来自a cython.view.array.

假设我没有从外部传入我的cython函数的数据,而是想分配内存并将其作为a返回np.ndarray,我选择了哪些选项?还假设该缓冲区的大小不是编译时常量,即我不能在堆栈上分配,但需要malloc选项1.

因此,3个选项可以解释如下:

from libc.stdlib cimport malloc, free
cimport numpy as np
from cython cimport view

np.import_array()

def memview_malloc(int N):
    cdef int * m = <int *>malloc(N * sizeof(int))
    cdef int[::1] b = <int[:N]>m
    free(<void *>m)

def memview_ndarray(int N):
    cdef int[::1] b = np.empty(N, dtype=np.int32)

def memview_cyarray(int N):
    cdef int[::1] b = view.array(shape=(N,), itemsize=sizeof(int), format="i")
Run Code Online (Sandbox Code Playgroud)

让我感到惊讶的是,在所有三种情况下,Cython为内存分配生成了大量代码,特别是调用__Pyx_PyObject_to_MemoryviewSlice_dc_int.这表明(我可能在这里错了,我对Cython内部工作的洞察力非常有限),它首先创建一个Python对象,然后将其"转换"到内存视图中,这似乎是不必要的开销.

一个简单的基准测试并未揭示三种方法之间存在很大差异,其中2是最薄弱的方法.

推荐三种方法中的哪一种?或者有更好的选择吗? …

python memory buffer memory-management cython

65
推荐指数
2
解决办法
1万
查看次数

何时使用字节数组和字节缓冲区?

字节数组和字节缓冲区有什么区别?
此外,在什么情况下应该优先于另一个?

[我的用例是用于在java中开发的Web应用程序].

java buffer byte bytearray

62
推荐指数
3
解决办法
3万
查看次数

将缓冲区转换为nodejs中的ReadableStream

我对Buffers和ReadableStreams很新,所以这可能是一个愚蠢的问题.我有一个库作为ReadableStream的输入,但我的输入只是一个base64格式的图像.我可以像这样转换Buffer中的数据:

var img = new Buffer(img_string, 'base64');
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其转换为ReadableStream或将我获得的Buffer转换为ReadableStream.

有没有办法做到这一点,还是我试图实现不可能的?

谢谢.

javascript buffer stream node.js

62
推荐指数
8
解决办法
6万
查看次数

Python中的二进制缓冲区

在Python中,您可以将StringIO用于字符数据的类文件缓冲区.内存映射文件基本上对二进制数据做类似的事情,但它需要一个用作基础的文件.Python是否有一个用于二进制数据的文件对象,并且只是内存,相当于Java的ByteArrayOutputStream

我的用例是我想在内存中创建一个ZIP文件,ZipFile需要一个类似文件的对象.

python io binary buffer

57
推荐指数
2
解决办法
5万
查看次数

无论如何都可以在log4net中以可编程方式刷新缓冲区

我正在使用log4net和AdoNetAppender.似乎AdoNetAppender有一个Flush方法.无论如何我可以从我的代码中调用它吗?

我正在尝试创建一个管理页面来查看数据库日志中的所有条目,我想用bufferSize = 100(或更多)设置log4net,然后我希望管理员能够单击管理员上的按钮页面强制log4net将缓冲的日志条目写入数据库(不关闭log4net).

那可能吗?

log4net buffer flush adonetappender

57
推荐指数
2
解决办法
2万
查看次数

如何找到linux的socket缓冲区大小

什么是linux的默认套接字缓冲区大小?有没有命令可以看到它?

sockets linux buffer

56
推荐指数
3
解决办法
13万
查看次数

std :: fstream缓冲与手动缓冲(为什么10倍增益与手动缓冲)?

我测试了两种写入配置:

1)Fstream缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream;
stream.rdbuf()->pubsetbuf(buffer, length);
stream.open("test.dat", std::ios::binary | std::ios::trunc)

// To write I use :
stream.write(reinterpret_cast<char*>(&x), sizeof(x));
Run Code Online (Sandbox Code Playgroud)

2)手动缓冲:

// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream("test.dat", std::ios::binary | std::ios::trunc);

// Then I put manually the data in the buffer

// To write I use :
stream.write(buffer, length);
Run Code Online (Sandbox Code Playgroud)

我期待同样的结果......

但是我的手动缓冲可以将性能提高10倍来写入100MB的文件,并且与正常情况相比,fstream缓冲不会改变任何东西(不重新定义缓冲区).

有人对这种情况有解释吗?

编辑:这是新闻:刚刚在超级计算机上完成的基准测试(Linux 64位架构,持续英特尔至强8核,Lustre文件系统和...希望配置良好的编译器) 基准 (我没有解释1kB手动缓冲器"共振"的原因......)

编辑2:在1024 B的共振(如果有人对此有所了解,我很感兴趣): 在此输入图像描述

c++ buffer fstream file c++11

55
推荐指数
2
解决办法
2万
查看次数

应该使用字节缓冲区来签名还是使用unsigned char缓冲区?

字节缓冲区应该是char或unsigned char还是char缓冲区?C和C++之间有什么区别?

谢谢.

c c++ buffer char

54
推荐指数
5
解决办法
2万
查看次数

在C中刷新缓冲区

如果fflush()不用于冲洗,即使它是一个输出流的缓冲区?

它有用的是什么?我们如何刷一般缓冲区?

c buffer fflush

54
推荐指数
1
解决办法
17万
查看次数