标签: buffer

是否有缓冲区大小附加到标准输出?

我试图在Windows上找到与stdout相关的数据限制的一些信息.我似乎无法在MSDN上找到相关信息.

  1. 可以将多少数据写入stdout是否有限制?如果是这样,如果达到限制会发生什么?数据丢失了吗?

  2. 如果重定向stdout(例如,通过从.Net启动进程并使用ProcessStartInfo.RedirectStandardOutput属性),这对可以写入多少数据有影响吗?当我从调用过程中的stdout流中读取时,这是否会影响限制?

  3. 这些限制是否与命名管道有关?

.net windows buffer stdout

11
推荐指数
1
解决办法
7547
查看次数

InputStreamReader缓冲问题

我正在从一个文件中读取数据,遗憾的是,这种文件有两种类型的字符编码.

有一个标题和一个正文.标头始终为ASCII,并定义正文编码的字符集.

标头不是固定长度,必须通过解析器运行以确定其内容/长度.

该文件也可能非常大,所以我需要避免将整个内容带入内存.

所以我开始使用单个InputStream.我最初使用带有ASCII的InputStreamReader包装它并解码标头并提取主体的字符集.都好.

然后我创建一个具有正确字符集的新InputStreamReader,将其放在同一个InputStream上并开始尝试读取正文.

不幸的是,javadoc证实了这一点,即InputStreamReader可能会选择提前读取以达到效率目的.因此,标题的阅读会咀嚼身体的一部分/全部.

有没有人有解决这个问题的建议?会手动创建一个CharsetDecoder并一次输入一个字节但是一个好主意(可能包含在自定义的Reader实现中吗?)

提前致谢.

编辑:我的最终解决方案是编写一个没有缓冲的InputStreamReader,以确保我可以解析标题而不会咀嚼身体的一部分.虽然这不是非常有效,但我使用BufferedInputStream包装原始InputStream,因此它不会成为问题.

// An InputStreamReader that only consumes as many bytes as is necessary
// It does not do any read-ahead.
public class InputStreamReaderUnbuffered extends Reader
{
    private final CharsetDecoder charsetDecoder;
    private final InputStream inputStream;
    private final ByteBuffer byteBuffer = ByteBuffer.allocate( 1 );

    public InputStreamReaderUnbuffered( InputStream inputStream, Charset charset )
    {
        this.inputStream = inputStream;
        charsetDecoder = charset.newDecoder();
    }

    @Override
    public int read() throws IOException
    {
        boolean middleOfReading = false;

        while ( true …
Run Code Online (Sandbox Code Playgroud)

java buffer decode character-encoding inputstreamreader

11
推荐指数
1
解决办法
2131
查看次数

在C中为各种事物重复使用相同的缓冲区名称是一种常见做法吗?

例如,假设我有一个缓冲区char journal_name[25],我用它来存储日志名称.现在假设在代码中稍后几行我想将某人的名字存储到缓冲区中.我应该去char person_name[25]还是只是重用journal_name[25]

麻烦的是,每个阅读代码的人(以及几周之后我也必须了解journal_name)现在实际上是person_name.

但是反驳的论点是拥有两个缓冲区会增加空间使用量.所以最好使用一个.

你怎么看待这个问题?

谢谢,Boda Cydo.

c buffer naming

11
推荐指数
3
解决办法
750
查看次数

使用LINQ在字节数组中搜索以某个字节开始/停止的所有子数组

我正在处理COM端口应用程序,我们有一个定义的可变长度数据包结构,我正在与微控制器通信.数据包具有开始和停止字节的分隔符.麻烦的是,有时读缓冲区可能包含无关的字符.看起来我总是得到整个数据包,只是在实际数据之前/之后的一些额外的喋喋不休.所以我有一个缓冲区,只要从COM端口收到新数据,我就会附加数据.搜索此缓冲区以查找可能出现的数据包的最佳方法是什么?例如:

说我的数据包分隔符是0xFF,我有一个数组

{ 0x00, 0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF, 0x04 }
Run Code Online (Sandbox Code Playgroud)

如何创建一个函数/ LINQ-statment来返回以分隔符开头和结尾的所有子数组(几乎就像带有通配符的滑动相关器)?

该示例将返回以下3个数组:

{0xFF, 0x02, 0xDA, 0xFF}, {0xFF, 0x55, 0xFF}, and
{0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF}
Run Code Online (Sandbox Code Playgroud)

c# linq buffer bytearray

11
推荐指数
2
解决办法
9351
查看次数

pcap unix缓冲如何工作?

假设场景:udp数据包流到达机器X,机器X正在运行两个程序 - 一个正在侦听带有recv()的数据包,另一个正在运行pcap.

在这种情况下,据我所知,数据包存储在接口中,直到它由内核轮询,然后将内核移动到内核内存中的缓冲区,并将数据包复制到另外两个缓冲区 - 一个缓冲区用于程序使用recv监听,并使用pcap监听程序的一个缓冲区.数据包在读取时从相应的缓冲区中删除 - 通过pcap_next()或recv(),下次进程调度程序运行它们(我假设它们在这种情况下阻塞).它是否正确?是否真的使用了4个缓冲区,还是以其他方式处理?

我正在寻找尽可能详细的描述,关于在这种情况下真正涉及哪些缓冲区,以及数据包如何从一个移动到另一个(例如,数据包在进入recv缓冲区之前被复制到pcaps缓冲区,之后或未定义?).

我知道这似乎是一个很大的问题,但我真正关心的是数据包的存储位置以及数据存储的时间长短.子弹点很好.理想情况下,我想要一个通用的答案,但如果它在OS之间变化我对Linux最感兴趣.

c buffer operating-system kernel packet

11
推荐指数
1
解决办法
2428
查看次数

Java中的缓冲和无缓冲流

我正在阅读有关Java IO的一些文档,只是想确定我是否正确:

无缓冲输入流:FileInputStream,InputStreamReader,FileReader

无缓冲输出流:FileOutputStream,OutputStreamWriter,FileWriter

缓冲输出流:PrintStream,PrintWriter

此外,我们还有BufferedInputStream,BufferedOutputStream,BufferedReader和BufferedWriter流,可将无缓冲的流转换为缓冲版本.

最后,我观察到了Character Streams,即.InputStreamReader,FileReader,OutputStreamWriter,FileWriter,在将字节发送到流之前为字节维护内部字节缓冲区.这个字节缓冲区不在我们的控制之下.因此,对于Character Streams,缓冲是指用于存储进出程序的字符的高级字符缓冲区.

我说的一切都是正确的吗?

PS - 我知道这个缓冲问题在某种程度上依赖于实现,但我只是想确认一下javadocs在说什么

java io buffer stream

11
推荐指数
1
解决办法
6898
查看次数

Linux UDP接收缓冲区的最大大小

Linux UDP接收缓冲区的最大大小是多少?我认为它仅限于可用的RAM,但是当我设置时

rmem_max为5GB:

echo 5000000000 > /proc/sys/net/core/rmem_max
Run Code Online (Sandbox Code Playgroud)

和4GB的实际套接字缓冲区(在Erlang中):

gen_udp:listen(Port, [{recbuf, 4000000000}])
Run Code Online (Sandbox Code Playgroud)

当我测量缓冲区利用率时,它显示:

# netstat -u6anp | grep 5050
udp6  1409995136      0 :::5050  :::*       13483/beam.smp
Run Code Online (Sandbox Code Playgroud)

我不能超过这个1.4GB.对于较小的缓冲区大小,例如500MB,实际缓冲区大小与配置的值匹配.我的系统是Debian 6.0,机器有50GB RAM可用.

sockets linux buffer udp network-programming

11
推荐指数
1
解决办法
4万
查看次数

从缓冲区播放声音

我正在尝试构建一个实时语音呼叫应用程序.我的目标是使用本机JS麦克风api并通过websocket将数据发送到其他客户端.我想出了以下代码:

<script>
// Globals
var aCtx;
var analyser;
var microphone;

navigator.getUserMedia_ = (   navigator.getUserMedia
                           || navigator.webkitGetUserMedia 
                           || navigator.mozGetUserMedia 
                           || navigator.msGetUserMedia);

if (navigator.getUserMedia_) {
    navigator.getUserMedia_({audio: true}, function(stream) {
        aCtx = new webkitAudioContext();
        analyser = aCtx.createAnalyser();
        microphone = aCtx.createMediaStreamSource(stream);
        microphone.connect(analyser);
        process();
    });
};
function process(){
    console.log(analyser);
    setInterval(function(){
        FFTData = new Float32Array(analyser.frequencyBinCount);
        analyser.getFloatFrequencyData(FFTData);

        console.log(FFTData); // display
    },10);
}

</script>
Run Code Online (Sandbox Code Playgroud)

所以每隔10ms我就会得到缓冲区并通过节点发送.问题是我无法弄清楚如何播放缓冲区,我甚至不确定我是否以正确的方式获得缓冲区.我试过了:

var source = audioContext.createBufferSource();
var buffer; // the result printed in the code below
var audioBuffer = audioContext.createBuffer(1, buffer.length, 44100);
audioBuffer.getChannelData(0).set(buffer);
source.buffer = …
Run Code Online (Sandbox Code Playgroud)

javascript api html5 buffer microphone

11
推荐指数
1
解决办法
1984
查看次数

在Chrome中完全缓冲视频

是否可以在Chrome(和Opera)中完全缓冲HTML5视频?

我在亚马逊S3上以.mp4和.webm的形式主持电影.在HTML中我使用标准<video>标签.服务器以状态响应206 Partial Content.这很棒,因为它允许浏览器下载视频的任何部分,但我需要能够立即搜索文件的任何部分.

我试过了:

  1. .PROGRESS事件.当Chrome停止缓冲第一部分时,连接将被终止.下一部分是以新连接方式下载的,因此JavaScript无法继续检查下载的总数据.即使可能,旧数据也不会存储在缓存中.此方法适用于Firefox和Safari.哎呀,即使在IE10中!
  2. XHRS.我可以完全下载电影,但是当视频开始播放时,Chrome会尝试再次从服务器下载电影.我甚至试图将这部电影传递给base64中的HTML,但那是很多数据
  3. FileAPI.Chrome无法创建足够大的BLOB并崩溃.

欢迎任何帮助!

PS.我知道od和类似的问题,但我希望自从他们被问到后会有所改变.

javascript video html5 buffer google-chrome

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

SSIS - 该值太大,无法容纳缓冲区的列数据区域

我将一列Json数据传递给脚本组件进行处理.它一直很好,直到我有一个包含超过600,000长度的Json数据,然后发生跟随错误.

错误

我确实将MaxBuffer大小更改为10MB,我的数据只有600K左右,但它仍然不起作用,请咨询.

sql buffer json ssis script-component

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