标签: buffer

如何安全地取消InputStream读取?

从InputStream读取时,有没有办法在读取达到一定大小时取消读取并忽略流的其余部分,确保资源完全释放?

到目前为止,我刚刚完成阅读,但理想情况下我想停止阅读并继续前进.我该如何安全地做到这一点?

这是我到目前为止:

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int nRead;
byte[] byteData = new byte[16384];

while ((nRead = inputStream.read(byteData, 0, byteData.length)) != -1){

    if(buffer.size() <= MAX_FILE_SIZE){
        buffer.write(byteData, 0, nRead);
    }

}

if(buffer.size() <= MAX_FILE_SIZE){
    buffer.flush();
    mData = buffer.toByteArray();
}

inputStream.close();
Run Code Online (Sandbox Code Playgroud)

谢谢

java buffer inputstream

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

读取浮点数的最小缓冲区长度

我正在编写一个小命令行程序,它从stdin中读取两个浮点数,一个int和一个小字符串(最多4个字符串).我试图找出我应该创建的缓冲区大小并传递给fgets.我想我可以基于有多少个数字中应包括的最大值计算这个floatint分别,就像这样:

#include <float.h>
#include <limits.h>

...

int fmax = log10(FLOAT_MAX) + 2;     // Digits plus - and .
int imax = log10(INT_MAX) + 1;       // Digits plus -
int buflen = 4 + 2*fmax + imax + 4;  // 4 chars, 2 floats, 1 int, 3 spaces and \n

...

fgets(inbuf, buflen + 1, stdin);
Run Code Online (Sandbox Code Playgroud)

但是我发现这可能实际上并不正确.imax最终在我的系统上是10,这似乎有点低,而fmax如果是40.(我认为有点高,因为更长的值可以用e表示法表示.)

所以我的问题是:这是解决这个问题的最好方法吗?这甚至是必要的吗?它只是感觉比分配一个256的缓冲区更优雅,并假设它足够了.称之为骄傲; P.

c buffer fgets

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

Python 3如何从stdin上的文件生成md5哈希?

我试图使用Python 3从stdin计算文件的md5哈希

这是返回的错误消息.我不明白为什么它不返回md5哈希.任何帮助赞赏.

$./pymd5.py < tmp.pdf
Traceback (most recent call last):
  File "./pymd5.py", line 29, in <module>
    main()
  File "./pymd5.py", line 25, in main
    print(m.hexdigest())
TypeError: 'str' does not support the buffer interface
$ 
Run Code Online (Sandbox Code Playgroud)

代码:

#!/usr/local/bin/python3.2

import sys
import hashlib

BUFSIZE = 4096

def make_streams_binary():
    sys.stdin  = sys.stdin.detach()
    sys.stdout = sys.stdout.detach()

def main():
    make_streams_binary()
    m = hashlib.md5()
    while True:
        data = sys.stdin.read(BUFSIZE)
        if not data:
            break
        m.update(data)

    print(m.hexdigest())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

python string buffer md5

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

将缓冲区/指针设置为null

我试图不断从不同的文件中读取数据到unsigned char*类型的缓冲区.但是,在读取下一个文件之前,我似乎无法将缓冲区设置为NULL.

这里只是相关的代码:

#include <stdio.h>
#include <fstream>


int
 main (int argc, char** argv) { 

     FILE* dataFile = fopen("C:\\File1.txt", "rb");
     unsigned char *buffer = NULL;
     buffer = (unsigned char*)malloc(1000); 
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     dataFile = fopen("C:\\File2.txt", "rb");
     buffer = NULL;
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     system("pause");
     return 0; 

}
Run Code Online (Sandbox Code Playgroud)

我遇到的错误是在第二次出现这行:fread(buffer,1,1000,dataFile);

我得到的错误是:

调试断言失败!表达式:(缓冲区!= NULL)

它指向fread.c的第147行,基本上是:

/* validation */
_VALIDATE_RETURN((buffer != NULL), EINVAL, 0);
if (stream == NULL || num > (SIZE_MAX / elementSize))
{
    if (bufferSize != SIZE_MAX)
    {
        memset(buffer, _BUFFER_FILL_PATTERN, bufferSize);
    }

    _VALIDATE_RETURN((stream != NULL), …
Run Code Online (Sandbox Code Playgroud)

c++ buffer pointers fread

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

为什么我总是得到我的字符串数组的最后一个元素?

我试图从文本文件中读取所有字符串并将它们保存在字符串数组中.但是,当我尝试打印我的字符串数组的内容时,只打印最后一部分.为什么我的代码只复制最后一个字符串?

我的代码

# include <stdio.h>
# define BUFFERSIZE 100

int main(int argc, char *argv[]){
   char buffer[BUFFERSIZE];

   int i = 0;
   char *text[BUFFERSIZE];

   while(fgets(buffer, BUFFERSIZE, stdin) != NULL){
          text[i] = buffer;
          i++;
   }

   int j = 0;
   for (j=0; j<sizeof(text)/sizeof(char); i++){
          printf("%s\n", text[j]);
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的文字文件

ESD can create spectacular electric sparks (thunder and lightning is a large-scale ESD       event), but also less dramatic forms which may be neither seen nor heard, yet still be large enough to cause …
Run Code Online (Sandbox Code Playgroud)

c string buffer

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

在Bash中,当您将多个异步命令传递给一个使用者时会发生什么?

考虑一下这个Bash代码:

(cmd1 & cmd2) | consumer
Run Code Online (Sandbox Code Playgroud)

consumer标准输入可能会出现什么样的情况?

  1. 输出cmd1,然后输出cmd2
  2. 来自cmd1任意点缀的线条来自cmd2
  3. 来自cmd1任意散布的字节来自cmd2
  4. 别的什么?

parallel-processing bash buffer asynchronous pipe

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

节点流缓冲区在console.log与process.stdout.write中

使用NodeJS v5.6我创建了一个名为的文件read-stream.js:

const
    fs = require('fs'),
    stream = fs.createReadStream(process.argv[2]);

stream.on('data', function(chunk) {
    process.stdout.write(chunk);
});

stream.on('error', function(err) {
    process.stderr.write("ERROR: " + err.message + "\n");
});
Run Code Online (Sandbox Code Playgroud)

和一个纯文本的数据文件target.txt:

hello world
this is the second line 
Run Code Online (Sandbox Code Playgroud)

如果我这样做node read-stream.js target.txt的内容target.txt正常在我的控制台打印,一切都很好.

但是,如果我切换process.stdout.write(chunk);,console.log(chunk);那么我得到的结果是:

<Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 74 68 69 73 20 69 73 20 74 68 65 20 73 65 63 6f 6e …
Run Code Online (Sandbox Code Playgroud)

buffer character-encoding node.js

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

Vim:如何从一个缓冲区读到另一个缓冲区

在vim中,使用read命令可以轻松地将文件读入当前缓冲区:

:r my.file
Run Code Online (Sandbox Code Playgroud)

但是如果文件的路径很长,并且文件在另一个缓冲区中打开,我怎样才能读取缓冲区的内容,即

:r {buffer_number}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以直接从一个缓冲区读取另一个缓冲区而不使用yank缓冲区?

vim buffer

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

从缓冲区到JSON的Javascript

我正在使用bleno(一个节点js BLE程序包),它使用Buffer来发送和接收数据。我将如何获取Buffer对象并将其转换为JSON?这就是我现在所拥有的:

bufferToJson = buffer.toString();
bufferToJson = JSON.stringify(bufferToJson)
bufferToJson = JSON.parse(bufferToJson)
Run Code Online (Sandbox Code Playgroud)

缓冲区是数据所在的位置。{cmd:'echo'}我尝试过bufferToJson.cmd并且只能弄不清的是缓冲区的一个示例。谢谢。

javascript buffer json node.js

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

OpenGL更新静态VBO

我刚刚尝试更新顶点缓冲区对象(vbo),其中包含带静态绘图的数据.为什么我可以用它更新glBufferSubData?我一直认为静态vbo不能改变.

java opengl buffer lwjgl

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