小编rad*_*dai的帖子

如何在protobuf中定义循环?

说我有以下mode.proto文件:

message EntityD {
    optional EntityE ePointer = 1;
    optional int32 dField = 2;
}

message EntityE {
    optional EntityD dPointer = 1;
    optional int32 eField = 2;
}
Run Code Online (Sandbox Code Playgroud)

这有两个实体--D和E,它们允许交叉链接.我的问题是,从以上*.proto生成java代码后无法创建一个循环:

public static void main(String[] args) throws Exception {
    Model.EntityD.Builder dBuilder = Model.EntityD.newBuilder();
    Model.EntityE.Builder eBuilder = Model.EntityE.newBuilder();

    dBuilder.setDField(42);
    eBuilder.setEField(7);
    dBuilder.setEPointer(eBuilder);
    eBuilder.setDPointer(dBuilder);

    Model.EntityD d = dBuilder.build();
    Model.EntityE e = eBuilder.build();

    System.err.println("same d: "+(d==e.getDPointer()));
    System.err.println("same e: "+(e==d.getEPointer()));
}
Run Code Online (Sandbox Code Playgroud)

我试图创建一个简单的D < - > E循环.相反,我得到这个:

same d: false 
same e: false
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

IS周期中创建的模型,但只有具有一定深度的开始.

这是probuf生成的java代码的问题吗?protobuf是否正式支持图表中的周期?其他protobuf"输出"语言的预期结果是什么?(即c …

c++ java protocol-buffers

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

将整数移位零次的效果是什么?

我刚刚在DirectByteBuffer.slice()中发现了这个:

public ByteBuffer slice() {
    int pos = this.position();
    int lim = this.limit();
    assert (pos <= lim);
    int rem = (pos <= lim ? lim - pos : 0);
    int off = (pos << 0); // <---- what does this do
    assert (off >= 0);
    return new DirectByteBuffer(this, -1, 0, rem, rem, off);
}
Run Code Online (Sandbox Code Playgroud)

将int左移0的重点是什么?

java

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

java.net.BindException:打开太多连接时无法分配请求的地址

我运行以下代码,它只是在无限循环中连接和关闭套接字:

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
import java.nio.channels.spi.SelectorProvider;

public class Main {
    public static void main(String[] args) throws Exception {
        Thread.sleep(1000);
        InetAddress localhost = InetAddress.getByName("127.0.0.1");
        InetSocketAddress localhostRpcbind = new InetSocketAddress(localhost, 111);
        SelectorProvider selectorProvider = SelectorProvider.provider();
        long iterations = 0;
        while (true) {
            try {
                SocketChannel socketChannel = selectorProvider.openSocketChannel();
                socketChannel.connect(localhostRpcbind);
                socketChannel.finishConnect();
                socketChannel.close();
                iterations ++;
            } catch (Exception e) {
                System.err.println("after " + iterations + " iterations");
                e.printStackTrace(System.err);
                throw e;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

端口 111 是 rpcbind 的端口(已在我的计算机上启动并运行)。在第一次运行代码时,我会得到类似的信息:

after 28239 …
Run Code Online (Sandbox Code Playgroud)

java linux

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

spring 通用应用程序事件无法到达目的地

我有以下弹簧架豆。这个想法是它保留某物的一个实例,并在某物发生变化时触发一个更改事件(同时提供旧值和新值):

public class Holder<T> implements ApplicationEventPublisherAware {
    private final Class<T> payloadType; //because java generics are incomplete
    private T curr; //latest value being held
    private ApplicationEventPublisher publisher; //spring context ref

    public Holder(Class<T> payloadType) {
        this.payloadType = payloadType;
    }

    public void change() throws Exception {
        T prev = curr;
        curr = payloadType.newInstance();
        publisher.publishEvent(new ContentsChangedEvent<>(prev, curr));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个对这些事件做出反应的监听器类:

@Named
public class Listener {

    @EventListener
    public void onChange(ContentsChangedEvent<Cat> event) {
        //never gets called
    }

    @EventListener
    public void onErasedChange(ContentsChangedEvent<?> event) {
        //does get called …
Run Code Online (Sandbox Code Playgroud)

java spring

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

为什么 mysql 连接器/j 的 rewriteBatchedStatements 默认为 false?

mysql jdbc 驱动程序有一个名为 rewriteBatchedStatements 的属性,当设置为 true 时,可以显着改善批量插入,但必须显式打开。

我现在不得不为多个项目执行此操作,并且找不到任何必须手动打开它的充分理由。

为什么这不是默认值?

java mysql jdbc mysql-connector

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

在postgres下将PreparedStatement参数设置为null的正确方法

我使用 JDBC4(通过 JDK6)使用最新的 JDBC4 驱动程序连接到 postgresql 9.0。

conn = dpaDs.getConnection();
PreparedStatement stmt = conn.prepareStatement("delete from fss where f_id=? and f_lastmodified=?");
UUID target = UUID.fromString("8c5c5ac2-3a2a-49f3-ae48-29226d6ea3e7");
stmt.setObject(1, target, 1111);
//non of these work
//stmt.setNull(2,93);
//stmt.setObject(2,null, 93);
//stmt.setObject(2,null, java.sql.Types.NULL);
//stmt.setNull(2, java.sql.Types.NULL);
int rowCount = stmt.executeUpdate();
int g = 8;
Run Code Online (Sandbox Code Playgroud)

将第二个参数设置为 null 的正确方法是什么?我知道我可以使用“where ... f_lastmodified is null”,但是没有办法解决这个问题吗?

postgresql jdbc

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

如何在sql查询中正确使用LIKE语句

我有一个数据库,其中包含一个名为groupid和组名的字段.

样本数据

groupid   groupname
123          abc
234          bcr
1237         cde
Run Code Online (Sandbox Code Playgroud)

我喜欢将groupid与另一个输入数据进行比较,其大小大于组ID的大小.

我尝试了一个不能返回正确答案的查询

SELECT * 
  FROM mydata
 WHERE groupid LIKE '12309098';
Run Code Online (Sandbox Code Playgroud)

我的预期答案是 abc

正确答案有哪些变化?

提前致谢

sql sql-server

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