从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)
谢谢
我正在编写一个小命令行程序,它从stdin中读取两个浮点数,一个int和一个小字符串(最多4个字符串).我试图找出我应该创建的缓冲区大小并传递给fgets.我想我可以基于有多少个数字中应包括的最大值计算这个float和int分别,就像这样:
#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.
我试图使用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) 我试图不断从不同的文件中读取数据到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行,基本上是:
Run Code Online (Sandbox Code Playgroud)/* 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), …
我试图从文本文件中读取所有字符串并将它们保存在字符串数组中.但是,当我尝试打印我的字符串数组的内容时,只打印最后一部分.为什么我的代码只复制最后一个字符串?
# 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) 考虑一下这个Bash代码:
(cmd1 & cmd2) | consumer
Run Code Online (Sandbox Code Playgroud)
consumer标准输入可能会出现什么样的情况?
cmd1,然后输出cmd2?cmd1任意点缀的线条来自cmd2?cmd1任意散布的字节来自cmd2?使用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) 在vim中,使用read命令可以轻松地将文件读入当前缓冲区:
:r my.file
Run Code Online (Sandbox Code Playgroud)
但是如果文件的路径很长,并且文件在另一个缓冲区中打开,我怎样才能读取缓冲区的内容,即
:r {buffer_number}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以直接从一个缓冲区读取另一个缓冲区而不使用yank缓冲区?
我正在使用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并且只能弄不清的是缓冲区的一个示例。谢谢。
我刚刚尝试更新顶点缓冲区对象(vbo),其中包含带静态绘图的数据.为什么我可以用它更新glBufferSubData?我一直认为静态vbo不能改变.