小编Ela*_*ian的帖子

Java - 将写入值优化为位到bytebuffer的位

我目前正在研究一些网络代码(这是我的第一个服务器)并且有一个关于优化特定函数的快速问题,该函数将值写为位然后将它们打包成一个字节.优化此功能的原因是因为每个服务器标记使用数千次来将数据打包发送到多个客户端.

示例可以更好地用于解释函数试图完成的内容:值3可以由两位表示.在二进制中,它看起来像00000011.该函数会将此二进制值转换为11000000.当再次调用该函数时,它将知道从第3个最高有效位(右边的第3个/第13个)开始,并在当前字节中最多写入6位.如果那时剩下的位要写,它将从一个新字节开始.

这样做的目的是节省空间,如果有多个值可以小于byte.

我目前的功能如下:

 private ByteBuffer out = ByteBuffer.allocate(1024);
 private int bitIndex = 0;
 /*
  * Value: The value to write
  * Amount: The number of bits to represent the value in.
  */
     public OutputBuffer writeBits(long value, int amount) {
    if (bitIndex != 0) {
        int remainingBits = 8 - bitIndex;
        int bytePos = out.position() - 1;
        byte current = out.get(bytePos);
        int shiftAmount = amount - remainingBits;
        int bitsWritten = amount < remainingBits ? amount : …
Run Code Online (Sandbox Code Playgroud)

java networking byte bytebuffer bit

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

Docker,在生产中复制文件并在开发中使用卷

我刚开始使用 docker 进行开发,但想在我最新的项目中尝试一下,但遇到了几个问题。

我有一个场景,我想将当前项目目录作为卷链接到开发模式下正在运行的 docker 容器,以便可以在本地完成文件更改,而无需每次重新启动容器。为此,我有以下命令:

docker run --name app_instance -p 3100:80 -v $(pwd):/app appimage

相反,在生产中我想从当前项目目录复制文件。docker 文件中的 EG ADD . /app(使用 .dockerignore 文件来忽略某些文件夹)。另外,我想安装一个卷用于持久存储。对于这种情况,我有以下命令:

docker run --name app_instance -p 80:80 -v ./filestore:/app/filestore appimage

我的问题是,只有一个 dockerfile,对于开发命令,将安装一个卷,/app并且还会使用ADD . /app. 我还没有测试过在这种情况下会发生什么,但我假设将两者用于同一目的地是不正确的。

我的问题是,处理这种情况的最佳做法是什么?

我想到的解决方案:

  • 将项目文件夹挂载到与/app开发期间不同的路径,并忽略 dockerfile 在容器中创建的 /app 目录
  • 有两个 docker 文件,一个复制当前项目,另一个不复制。

production docker dockerfile

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

C++使用模板包装任何集合类型

然而,对于c ++而言,这是一个非常新的模板问题

假设我有一个简单的模板类,如下所示:

template<typename Collection>
class MySack {
private:
    Collection c;

public:
    typedef typename Collection::value_type value_type;

    void add(const value_type& value) {
        c.push_back(value);
    }
};
Run Code Online (Sandbox Code Playgroud)

该类的目的是接受任何类型的集合,并允许用户为指定的值插入正确类型的值typename Collection.

显而易见的问题是,这只适用于已push_back定义方法的类型,这意味着它可以使用list但不能使用set.

我开始阅读有关模板特化的内容,看看是否有任何帮助,但我不认为这会提供解决方案,因为必须知道集合中包含的类型.

如何在c ++中解决这个问题?

c++ collections templates

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

泛型通配符或类似的东西

目前正在进行一项任务,我必须创建一个用C#实现的自定义用户控件.我主要有一个java背景,所以我不知道我在C#中做的事情是否可行 - 如果不是,有人可以给我一个链接或替代方式我可以在C#中完成同样的事情.

public abstract class Graph<T,U>
where T : Configuration.GraphConfiguration
where U : Representatives.GraphRepresentative
{
    public abstract void Draw(Graphics g);
}

public class LineGraph: Graph<LineGraphConfiguration,LineGraphRepresentative>{

    public void draw(Graphics g){

    } 

}

//"Graph" is not valid since the type params <T,U> are not specified..
//However, I cannot supply them since I don't know until runtime what 
//they are. In java just "Graph" or Graph<?,?> would be valid and I  need
//something similar.
public class MyCustomControl: UserControl{
    Graph currentGraph;

    override OnPaint(PaintEventArgs …
Run Code Online (Sandbox Code Playgroud)

c# generics

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