标签: buffer

cout的缓冲如何工作?

我知道cout几天前有缓冲区,当我google它时,据说缓冲区有点像堆栈并从右到左获取cout和printf的输出,然后将它们输出(到控制台或文件) )从顶部到bottem.像这样,

a = 1; b = 2; c = 3;
cout<<a<<b<<c<<endl;
buffer?|3|2|1|<-   (take “<-” as a poniter)

output?|3|2|<-     (output 1)
        |3|<-       (output 2)
        |<-         (output 3)
Run Code Online (Sandbox Code Playgroud)

然后我写下面的代码,

#include <iostream> 
using namespace std; 
int c = 6;
int f() 
{   
    c+=1; 
    return c; 
} 

int main() 
{ 
     int i = 0; 
     cout <<"i="<<i<<" i++="<<i++<<" i--="<<i--<<endl; 
     i = 0;
     printf("i=%d i++=%d i--=%d\n" , i , i++ ,i-- );

     cout<<f()<<" "<<f()<<" "<<f()<<endl; 
     c = 6;
     printf("%d %d %d\n" , f() , f() …
Run Code Online (Sandbox Code Playgroud)

c++ buffer cout

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

Java - "没有可用的缓冲区空间"套接字错误原因?

我正在用Java编写网络程序.我使用ServerSocket和Socket对象使用TCP发送和接收消息.我的程序如果运行一小段时间运行正常但是如果我运行它的时间较长,我会收到以下错误:

java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我认为这可能是因为我没有关闭所有套接字但是我已经改变了我的代码:当我想要一个新的套接字并添加了一个finalize方法来关闭它时,我创建了一个类.我还有一个关闭ServerSocket的finalize方法,所以我不知道问题是什么.

在我收到错误之后,如果我立即再次运行程序,它会比以前更快地遇到问题.然后,如果我等待一段时间并运行它,它会回到原来的时间.

我真的无法解决这个问题,而且我一直试图弄清楚这个问题.有谁知道问题是什么?

提前致谢!

更新:

所以我已经弄清楚了错误的来源,这真的很奇怪.我有以下代码导致问题:

try {
        sock = new Socket(InetAddress.getByName(ipaddr), port);
        sock.close();

        // os = sock.getOutputStream();
        // byte[] arr = s.getBytes();
        // os.write(arr);
        // os.close();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            sock.close();
        } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

java sockets buffer tcp serversocket

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

将两个缓冲区合二为一

我需要有两个缓冲区(AB),当其中一个缓冲区已满时,需要将其内容写入"合并"缓冲区 - C.对于此操作,使用memcopy似乎太慢,如我在下面的问题中所述.任何见解?'

我没有尝试,但我被告知memcopy将无法正常工作.这是一个嵌入式系统.2个缓冲区.两种不同的尺寸,当它们完全愚蠢到一个普通的'C'缓冲区,这个缓冲区比其他两个更大..不知道为什么我的评级下降了..

编辑:缓冲区A和B将在C完全为空之前写入.

存储器复制的时间过长和公共缓冲"C"越来越超限.

c embedded buffer buffer-overflow

0
推荐指数
2
解决办法
2570
查看次数

C++变量数组

我正在尝试编写一个处理极长消息的套接字系统(它处理聊天系统).我正在尝试使用const int来初始化一个数组,它可以编译,但我被警告有关ISO C++禁止它.有人可以对这种情况有所了解吗?

这是一个如何使用它的例子(这是为了避免编写一个字节剩余的多接收系统(我已经拥有,但我觉得这会更有效)).

    const int BUFFERLEN = atoi(api_GETVALUE(1,inbuffer).c_str()); //that is my API call
       if(BUFFERLEN != -1) { //it returns "-1" on error
          char INBUFFER[BUFFERLEN];
          recv(SOCK,INBUFFER,sizeof(INBUFFER),0);
       }
Run Code Online (Sandbox Code Playgroud)

这是否可以接受,或者我应该坚持多次接收直到完成的方法?

谢谢,科林

c++ sockets arrays variables buffer

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

BufferedReader java未到达文件末尾

目前我正在尝试从内容长度为37743的响应中读取一个不那么短的流.我使用read(char []缓冲区,int offset,int length),但是在将它与原来的json文件我正在读.我试图检查这是否是一个常见的问题,但我找不到任何可能导致问题的原因:

  • 字符串构建器的最大长度?
  • char []的最大长度?
  • 缓冲长度?(目前8192)
  • 条件不正确?(以下代码段)
while ((reader.read(buffer, 0, buffer.length)) != -1)
     sb.append(String.valueOf(buffer)); //sb is the String builder
Run Code Online (Sandbox Code Playgroud)

注意当缓冲区长度被改变,结果再次改变,例如,当改为1024,与8192缓冲达到加上又是一段文字,这是不符合原来的JSON字符串一致得到相同的结果.

java buffer file bufferedreader

0
推荐指数
2
解决办法
1303
查看次数

尝试使用fgets()从文件读取时出现奇怪的问题

我试图从C中的文件中读取fgets()但是我遇到了以下问题:

虽然我可以使用fopen()以下命令成功打开文件:

if ( file=fopen(filename, "r") == NULL )
{
    printf("Couldn't open specified file. Please try again.");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

我无法从中读到任何东西.我正在使用以下循环,虽然没有打印任何内容并且执行成功终止.

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}
Run Code Online (Sandbox Code Playgroud)

这与实际文件名,文件大小或文件内容无关.似乎没有任何工作,并且调试器中没有任何内容显示为错误.我试过的示例文件是直接复制和粘贴的以下内容:

test.txt
#include <stdio.h>
int main ()
{
       printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

你有没有猜到为什么会这样?

注意:我已经从这个 S'O问题中获取了循环代码,所以我猜它是正确的.

c buffer input fgets

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

在gvim中使用单独的文件(?)创建两个窗口

我是初学者vi用户.我不知道术语,但我想把我的gvim终端(屏幕?)拆分成2个窗口,每个窗口有5个不同的文件(缓冲区?).我可以在一个窗口中打开前5个文件,然后拆分到第二个窗口,但我不知道如何在第二个窗口中打开另外5个不同的文件.我一直无法找到这些信息.通常我用:n和切换文件:prev.

再说一遍:我想在左侧窗口中输入文件1-5,在右侧窗口中输入文件6-10.这可能吗?

vim buffer split window

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

在完成所有错误检查之前,如何防止在Go中生成输出?

可能是一个简单的问题,但我在延迟请求处理函数中的输出时遇到问题.当我执行我的模板而不是响应编写器时,我正在使用"bufio"写入,但似乎缓冲区只能在它吐出来之前保持这么多.我担心它会吐出部分页面,然后遇到错误,留下不完整和难以理解的响应.什么是确保一切都保持缓冲直到它准备好被释放到野外的最佳策略?

error-handling buffer templates go

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

OpenGL如何填充缓冲区并将其读回?

我正在使用一个带有一堆GLfloats的OpenGL缓冲区作为顶点缓冲区,一切都很顺利.GLfloats的格式是[x1, y1, z1, x2, y2, z2, ...].

但是,在遵循本教程的同时,它告诉我使用glm::vec3:

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(GLfloat), &vertices[0], GL_STATIC_DRAW);

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

现在这段代码是有效的,我想知道OpenGL如何知道如何用glm :: vec3而不是GLfloats填充缓冲区.然后我想知道,当我从缓冲区读回数据时,使用:

std::vector<glm::vec3> data;
glGetBufferSubData(mTarget, offset, vertexCount * sizeof(glm::vec3), &data[0]);`
Run Code Online (Sandbox Code Playgroud)

这会产生一堆glm :: vec3吗?所以问题是,OpenGL如何填充缓冲区glm::vec3,并且它(如果是这样,如何)读取缓冲区?

c++ opengl buffer glm-math

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

在字节缓冲区内复制struct

我有以下结构:

struct sample {
  uint8_t four;
  bool    b;
  uint8_t two;
};
Run Code Online (Sandbox Code Playgroud)

为了发送udp数据包,我需要将这些值打包成一个字节:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
|     four      | 0 | b |  two  |
+---------------+---+---+-------+
Run Code Online (Sandbox Code Playgroud)

在这个字节中复制struct值的最佳方法是什么?我在检查之前检查了前提条件,因此在将uint8_t值复制到更小的空间时不会丢失任何数据.

c++ buffer byte bytebuffer memcpy

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