小编pet*_*ton的帖子

struct构造函数将占用struct空间中的空间?

大部分时间我struct用来保存套接字通信数据结构的所有参数,然后我可以通过传递起始地址及其大小轻松地复制,传递或将整个结构放在套接字上.

如果我struct为一个变量短数组添加一个构造函数,构造函数是否会占用struct中的任何空格?或者我可以struct使用构造函数处理与没有构造函数的构造函数相同struct,并将整个structon 复制到具有其起始地址和大小的套接字,并且其空间仍然是连续分配的?

c++ sockets struct

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

如何在开发过程中从一个地方的不同线程中捕获所有未捕获的异常?

我有一个不小的多线程应用程序与GUI和套接字通信.在开发过程中,我发现有时会有一些异常没有被捕获和记录.如果有的话,我必须盯着控制台才能得到它们.

有没有办法在一个地方捕获来自不同线程(包括EDT)的未捕获的异常,在main()中说,并记录它们?我在main()中放了一个try-catch 来捕获Throwable,但它不起作用.

编辑:

更具体的,我有Executors.newCachedThreadPool()Runnable接口秒.我不想在很多情况下使用Callable,因为我不想阻止我的调用线程.那么如何从Runnables中捕获异常?

同时,我怎么能赶上ü ncaught例外,摇摆EDT

java swing multithreading

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

为什么一个汉字需要一个字符(2个字节)却占用3个字节?

我有以下程序来测试Java如何处理汉字:

String s3 = "????";
char[] chs = s3.toCharArray();
byte[] bs = s3.getBytes(StandardCharsets.UTF_8);
byte[] bs2 = new String(chs).getBytes(StandardCharsets.UTF_8);

System.out.println("encoding=" + Charset.defaultCharset().name() + ", " + s3 + " char[].length=" + chs.length
                + ", byte[].length=" + bs.length + ", byte[]2.length=" + bs2.length);
Run Code Online (Sandbox Code Playgroud)

打印出来是这样的:

编码=UTF-8,???char[].length=4, byte[].length=12, byte[]2.length=12

结果是这些:

  1. 一个汉字取一个char,在Java中为2个字节,ifchar[]用来存放汉字;

  2. 一个汉字byte如果byte[]用于容纳汉字需要3s;

我的问题是如果 2 个字节就足够了,为什么我们使用 3 个字节?如果 2 个字节不够,为什么我们使用 2 个字节?

编辑:

我的 JVM 的默认编码设置为 UTF-8。

java character-encoding

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

为什么我不能在我的矢量中添加项目?

我在一个类中有以下代码:

    class A
    {
        std::vector<Parameter*> params;
        std::vector<Parameter*> getParamVector() {return params;}
        void addOneParam(Parameter* param)
        {
            params.push_back(param);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在另一个类B类中,我尝试通过执行以下操作将项添加到params向量中:

classA_Ptr->getParamVector().push_back(aParamPtr);
Run Code Online (Sandbox Code Playgroud)

但是在上面调用之后,参数矢量的大小仍为0.

我必须添加上面的addOneParams(Parameter* param)方法来将项添加到params向量中.为什么?

c++ vector

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

如何将<String,Float> Map toString方法转换为通用Number版本

我有一个方法来获取Map的内容作为字符串,如下所示:

    public static String toStringStringFloatMap(Map<String, Float> stringFloatMap)
    {
        String entries = "";

        Iterator<Entry<String, Float>> it = stringFloatMap.entrySet().iterator();
        while (it.hasNext())
        {
            Map.Entry<String, Float> pair = it.next();
            entries += pair.getKey() + "=" + pair.getValue() + "\n";
        }

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

现在我正在尝试将其转换为Integer,Short,Double,....的通用版本.我用"?extends Number"替换了所有的Float,但.... entrySet().iterator(); 语句导致编译错误,并告诉我以下内容:

Type mismatch: cannot convert from Iterator<Map.Entry<String,capture#6-of ? extends Number>> to Iterator<Map.Entry<String,? extends Number>>
Run Code Online (Sandbox Code Playgroud)

我不知道"捕获#6-of?extends Number"是什么意思.谁能为我解释一下?

编辑:

正如安迪所指出的那样<?, ?>可能是最好的.

但我的问题仍然是为什么iterator()行无法传递编译器?

    public static String toStringMapError(Map<?, ?> map)
    {
        String entries = "";

        Iterator<Entry<?, ?>> it = map.entrySet().iterator(); <<<<<------- …
Run Code Online (Sandbox Code Playgroud)

java generics

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

在 Java 中为什么数字运算的结果与变量运算不同

我有以下代码:

System.out.println("(int) (10 * 0.75 / 0.6 + 0.5)=" + (int) (10 * 0.75 / 0.6 + 0.5));
Run Code Online (Sandbox Code Playgroud)

打印出来的是:(10 * 0.75 / 0.6 + 0.5)= 13

还有一个:

int a = 10;
float b = 0.75f;
float c = 0.6f;
System.out.println("(int) (a * b / c + 0.5)=" + (int) (a * b / c + 0.5));
Run Code Online (Sandbox Code Playgroud)

打印出来的是 (a * b / c + 0.5)= 12

为什么它们不同?

编辑:

System.out.println("(int) (10 * 0.75f / 0.6f + 0.5f)=" + (int) (10 * 0.75f …

java

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

为什么ThreadPoolExecutor中的maxPoolSize什么也不做?

ThreadPoolExecutor类中,有一个maxPoolSize来指定最大线程池大小。这意味着如果线程数少于该数量,则池中的线程应立即执行。但是我发现事实并非如此。实际上,它不能超出corePoolSize。我很困惑。如果什么都不做,maxPoolSize的用途是什么?这里是我的测试程序:

我指定了corePoolSize = 2; maxPoolSize = 6; 我创建了5个线程(Runnable)。我认为所有5个线程(可运行)都应同时运行。但他们不是。它们中只有两个正在运行,另外三个则放在一边,直到前两个死亡。

我已经阅读了很多有关该主题的文章。但是没有人能指导我使5个线程同时运行。

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MyThreadPoolExecutorTest2
{
    private List<MyRunnable> myRunnables = new ArrayList<>();

    public static void main(String[] args)
    {
        new MyThreadPoolExecutorTest2().test();
    }

    public void test()
    {
        int poolSize = 2;
        int maxPoolSize = 6;
        int threadPoolKeepAliveTimeInSec = 30;
        ExecutorService threadPoolExecutor =
                new MySimpleThreadPoolExecutor(poolSize, maxPoolSize, threadPoolKeepAliveTimeInSec);
        int numOfThread = 5;
        System.out.println("Start thread pool test with corePoolSize=" + poolSize + ", maxPoolSize=" …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

让 Intellij 在注释后使用换行符

我正在尝试IntelliJ,看看它在 Java 开发中与Eclipse相比如何。我已经导入了Eclipse代码格式。但 Intellij 仍然给我这种格式:@Override public void run(). 我想要的是这样的:

@Override 
public void run()
Run Code Online (Sandbox Code Playgroud)

在网上搜索并尝试了一些设置,没有人适合我。

有人可以帮我解决这个问题吗?

顺便说一句,我不明白为什么 IntelliJ 需要一个插件来具有“保存操作”。通过查看该插件的下载计数,很明显“保存操作”是最需要的功能之一。

java eclipse intellij-idea

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

DICOM 为什么需要叠加以及如何读取它

在此处输入图片说明只是想知道为什么我们需要叠加层以及何时需要它?

我有一个带有叠加层的Scout图像,这些是什么意思,这些数字或分数是什么意思?

这些数字是如何绘制在图像上的?

dicom

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

为什么BigDecimal不像我预期的那样工作?

这是注释中的代码和结果:

我认为numB2应该是16.7500,numB3 = 16.7500,numB4 = 16.7和numB5 = 16.75.但它们并不像我预期的那样.为什么?

public void testBigDecimal()
{
    float num = 16.7499924f;

    int digitCount = 4;
    MathContext mContext = new MathContext(digitCount, RoundingMode.UP);
    BigDecimal numB = new BigDecimal(num, mContext);
    System.out.println("16.7499924f with MathContext(precision) of 4 =" + numB.floatValue());// 16.75
    numB.setScale(4, RoundingMode.UP);
    System.out
            .println("16.7499924f with MathContext(precision) of 4 and after setScale of 4 =" + numB.floatValue());// 16.75

    BigDecimal numB2 = new BigDecimal(num);
    System.out.println("16.7499924f without MathContext(precision =" + numB2.floatValue());// 16.749992
    numB2.setScale(4, RoundingMode.UP);
    System.out.println("16.7499924f without MathContext(precision) and after setScale of 4 …
Run Code Online (Sandbox Code Playgroud)

java

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