所以,如果我这样做:
dup2(0, backup); // backup stdin
dup2(somefile, 0); // somefile has four lines of content
fgets(...stdin); // consume one line
fgets(....stdin); // consume two lines
dup2(backup, 0); // switch stdin back to keyboard
Run Code Online (Sandbox Code Playgroud)
我在这一点上发现.. stdin仍然包含我没有消耗的两条线.这是为什么?因为无论重定向多少次,只有一个缓冲区?我如何摆脱剩下的两行,但是当我想回到它时,仍然记得我在somefile流中的位置?
我是C的新手,想要从文件中读取一些数据.
实际上,我发现了许多阅读功能,fgetc,fgets等.但我不知道哪个/组合最好用以下格式读取文件:
0 1500 100.50
1 200 9
2 150 10
Run Code Online (Sandbox Code Playgroud)
我只需要将上面的每一行保存到一个包含三个数据成员的结构中.
我只需要知道这样做的最佳实践,因此我是C编程的新手.
谢谢.
[输入|输出]从JDK1.0开始存在流,而从JDK1.1开始存在字符对应的读者|写入者.
大多数概念似乎相似,但有一个例外:的基类流声明其处理一个抽象方法单一次字节,而基地读/写器的类声明,其处理整个一个抽象方法char-arrays.
因此,鉴于我理解正确,每个重写的流类都限于处理单个字节(从而为每个字节执行至少一个方法调用!),而被覆盖的读取器/写入器只需要每个数组的方法调用(-buffer).
这不是一个巨大的性能问题吗?
流是否可以作为InputStream或者的子类实现OutputStream,但是仍然基于byte-arrays?
我无法从文件中读取数据,并将数据(文本)的选定部分连接到我自己的缓冲区中.
代码如下:
char buffer[1000];
char* allNewData = (char *)malloc(10000);
while (! myfile.eof() )
{
myfile.getline (buffer, 1000);
pch = strstr (buffer,"bla bla");
if(pch == NULL)
{
char* temp = buffer;
strcat(allNewData, temp);
strcat(allNewData, "\n");
}
else
{
strcat(allNewData, "here's bla bla");
strcat(allNewData, "\n");
}
}
cout<<allNewData<<endl;
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,allNewData首先有一些垃圾文本,然后是正确/预期的结果,如下所示:
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii <-rubbish data
hello <- actual data
Run Code Online (Sandbox Code Playgroud)
我需要摆脱这些垃圾数据,如何更改代码来实现这一目标?
请帮帮我..有谁知道吗?是我的blackberry bold 9700(5.0.0.469)支持HTML5音频流吗?谢谢..
我目前在我的应用程序中使用java.util.logger.它将其输出发送到System.err.我需要它继续这样做,但我还需要将该输出发送到其他东西.
有没有办法复制System.err流,以便它可以发送到两个不同的源?
我是C++文件io的新手,所以前几天我决定编写一个小程序,只读取一个UTF-8编码的字符串和一个二进制文件中的配对浮点数.模式是字符串浮点数,没有额外的数据或对之间的间距.编辑我已根据几个答案修改了代码.但是,输出保持不变("RoommateAp 0");
string readString (ifstream* file)
{
//Get the length of the upcoming string
uint16_t stringSize = 0;
file->read(reinterpret_cast<char*>(&stringSize), sizeof(char) * 2);
//Now that we know how long buffer should be, initialize it
char* buffer = new char[stringSize + 1];
buffer[stringSize] = '\0';
//Read in a number of chars equal to stringSize
file->read(buffer, stringSize);
//Build a string out of the data
string result = buffer;
delete[] buffer;
return result;
}
float readFloat (ifstream* file)
{
float buffer = …Run Code Online (Sandbox Code Playgroud) 假设我DataInputStream用来接收数据,但我不知道是否应该使用(例如)readUTF,readInt或者readLong.有没有一种方法可以告诉我在另一边写了什么类型的数据?
我有一个WCF服务,我想发送一个日志文件并在服务器上处理它.合同是:
[OperationContract]
void LogFile(Stream file);
Run Code Online (Sandbox Code Playgroud)
我在端点中使用StreamedRequest.
我遇到的问题是我无法找到一种方法来读取服务中的流.
当我调试调用时,我看到Stream是一个实例:
System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream
Run Code Online (Sandbox Code Playgroud)
从客户端我发送一个MemoryStream.
那么......我怎么能读到这个流?
谢谢.
Edit1:即时通讯使用:
Stream serviceStream = new MemoryStream();
byte[] buffer = new byte[10000];
int bytesRead = 0;
do
{
bytesRead = file.Read(buffer, 0, buffer.Length);
serviceStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
serviceStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)
读取流,什么都没有,总是0
您可以为BufferedOutputStream构造函数提供缓冲区大小的int参数.我的szenario我有一个进程写入磁盘和从磁盘读取进程.具有8192字节的默认缓冲区会导致大文件的高度碎片化.
现在我想知道如果我将缓冲区大小提升到1 Mb,是否可以减少碎片.
我认为这应该有效.但BufferedOutputStream如果我总是打电话,他仍然会尊重我的缓冲
BufferedOutputStream.write(smallBuffer,0,i); // i being smaller than 8192
我很小,因为我正在网上捕捉小的paketes(8192字节).但我想要BufferedOutputStream真正缓冲很多,而不是决定先冲洗?
是BufferedOutputStream "愚蠢的",足以等到缓冲区已满或者flush()被调用.或者它安装了一些基于时间的冲洗机制?