小编gd1*_*gd1的帖子

Java InputStream.read(byte [],int,int)方法,如何阻塞,直到读取了确切的字节数

我正在编写一个简单的客户端/服务器网络应用程序,通过TCP套接字发送和接收固定大小的消息.

到目前为止,我一直在使用getInputStream()getOutputStream()该方法的Socket类来获取数据流,然后调用read(byte[] b, int off, int len)该方法InputStream的类读取每个时间(这是一个消息的大小),60个字节.

后来,我阅读了该方法的Javadoc:

public int read(byte [] b,int off,int len)抛出IOException

将输入流中最多 len个字节的数据读入一个字节数组.尝试读取len个字节,但可以读取较小的数字.实际读取的字节数以整数形式返回.

我想知道是否有任何Java"开箱即用"的解决方案要阻止,直到len字节被读取,必要时永远等待.

我显然可以创建一个简单的循环,但我觉得我正在重新发明轮子.你能建议我一个干净的Java感知解决方案吗?

java inputstream

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

我在哪里可以获得"开放式手"/"闭合手"鼠标光标?

我正在寻找Adobe Reader 的开放式手动/闭合手动鼠标光标.他们在哪儿?如果它们不标准,那么在C#中创建它们的最简单方法是什么?

手游标

c# mouse user-interface winforms

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

内部类的奇怪constexpr行为

任何人都可以试着解释一下吗?

template<typename T, size_t S = T::noElems()>
struct C
{
};

struct X
{
    enum E { A, B, C };
    static constexpr size_t noElems() { return C+1; };
};

struct K
{
    C<X> cx; // this DOES compile
};

struct Y
{
    struct Z
    {
        enum E { A, B, C };
        static constexpr size_t noElems() { return C+1; };
    };
    C<Z, Z::C+1> cyz; // this DOES compile

    C<Z> cyz; // <--- this does NOT compile 
};
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++11

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

Java Character vs char:内存使用情况如何?

在我的一个课程中,我有一个类型的领域Character.我更喜欢它,char因为有时候这个领域" null毫无价值",并且以最清晰的方式代表这个(缺乏)信息.

但是我想知道这种方法的内存占用情况.我正在处理成千上万的物体,这两种选择之间可以忽略不计的差异现在值得进行一些调查.

我的第一个赌注是a char占用两个字节,而a Character是一个对象,因此需要更多才能支持其生命周期.但我知道盒装原语一样Integer,Character等不是普通类(想想装箱和拆箱),所以我不知道如果JVM可以使某些引擎盖下的一种优化.

此外,Character像其他东西一样收集垃圾还是生活周期不同?它们是从共享存储库汇集的吗?这个标准或JVM实现依赖吗?

我无法在互联网上找到有关此问题的任何明确信息.你能指点我一些信息吗?

java memory performance

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

在Scala中实现内部特征,就像在Java中使用内部接口一样

Java中的这段代码编译时没有错误:

interface T {
    interface Q {
    }
}

class C implements T.Q {
}
Run Code Online (Sandbox Code Playgroud)

而Scala中的此代码不会:

trait T {
    trait Q {
    }
}

class C extends T.Q {
}
Run Code Online (Sandbox Code Playgroud)

Scala中Java代码列表的正确翻译(如果存在)是什么?

关于语言设计的理论解释是受欢迎的.

java scala inner-classes

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

如何从我的applet中获取当前的Firefox配置文件路径?

我在我的applet中使用Mozilla的网络安全服务Java(JSS),以便在我的(已签名)Java Applet和Mozilla Firefox之间进行一些低级别的交互.

我面临的第一个问题之一是如何找到当前的Firefox配置文件路径.我需要它因为我必须调用CryptoManager 的initialize(String configDir)方法,所谓的configDir必须是Firefox配置文件的目录.

如何获取当前Firefox配置文件的完整路径?是否有一个干净的方式或我必须在{$ APPDATA}/Firefox中阅读profiles.ini,解析它然后选择一个随机的配置文件(希望它只有一个,或者我得到的是正确的)?

提前致谢

java firefox applet

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

提供用户定义的移动构造函数时,Visual Studio 2013不会删除复制构造函数

我很欣赏C++ 11标准所规定的:

如果类定义没有显式声明复制构造函数,则会隐式声明一个.如果类定义声明了移动构造函数或移动赋值运算符,则隐式声明的复制构造函数被定义为已删除 ; 否则,它被定义为默认.

(实际上从这里复制)

以下代码:

#include <iostream>

struct C
{
    int x = 1;

    C()
    {
    }

    C(C&&)
    {
    }
};

int main()
{
    const C c;
    C c2(c);

    std::cout << c.x << " " << c2.x << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不编译gcc 4.9.0,但在Visual Studio 2013(Compiler Version 18.00.21005.1 for x86)上编译得很好.这是另一个Visual Studio违反标准,还是我这次做错了什么?如果这违反了标准,是否存在跟踪错误或记录此行为的任何来源?

c++ visual-studio c++11 visual-studio-2013

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

有时可以获取重载函数模板的地址

gcc 4.9.0:

#include <iostream>
#include <map>

struct A
{
    typedef int type;
};

template<typename T> void foo(T*) { std::cout << "a" << std::endl; }
template<typename T> void foo(typename T::type*) { std::cout << "b" << std::endl; }

template<typename T>
struct identity
{
    typedef T type;
};

template<typename T> void bar(T*) { std::cout << "a" << std::endl; }
template<typename T> void bar(typename identity<T>::type*) { std::cout << "b" << std::endl; }

int main()
{
    //auto f = foo<A>; // ambiguous
    foo<A>(0); …
Run Code Online (Sandbox Code Playgroud)

c++ templates language-lawyer overload-resolution

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

在Java中广播UDP数据包的正确和有效方法是什么?

我需要在每个网络接口上广播UDP数据包.起初,我尝试广播255.255.255.255,但没有结果,后来我发现这个"已被弃用了大约20年".因此,我尝试在每个网络接口上进行迭代,以获取接口的广播地址,然后将UDP数据包发送到该地址.

仍然,以下代码:

public static Collection<InetAddress> getBroadcastAddresses() {
    try {
        Collection<InetAddress> result = new LinkedList<InetAddress>();
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
                for (InterfaceAddress address : netint.getInterfaceAddresses()) {
                    InetAddress broadcastAddress = address.getBroadcast();
                    if (broadcastAddress != null)
                        result.add(broadcastAddress);
                }
        return result;
    } catch (SocketException e) {
        throw new RuntimeException(e);
    }
}

public static void broadcast(int port, DatagramPacket packet,
        DatagramSocket socket, PrintWriter logger) throws IOException {

    packet.setPort(port);

    for (InetAddress address : getBroadcastAddresses()) {
        logger.println("Broadcasting to: "+address);
        packet.setAddress(address);
        socket.send(packet);
    } …
Run Code Online (Sandbox Code Playgroud)

java sockets udp network-programming broadcast

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

不可编辑时,将插入符号保留在TextArea中

我正在使用java,我正在尝试制作一个JTextArea不可编辑的但仍然在该领域的插入符号.换句话说,文本区域不显示用户键入的字符,但仍具有闪烁的插入符号(即焦点).

老实说,我很难过这个问题.我已经尝试过乱了setEditable,但是没有办法保留插入符号.我也尝试删除用户输入的字符,但我不能阻止它在屏幕上闪烁.

java swing jtextarea

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