小编leo*_*loy的帖子

找到两个免费的TCP端口

我理解以下代码可以(可能不是非常有效)在Java中找到一个免费的TCP端口:

  public static int findFreePort() {
    int port;
    try {
      ServerSocket socket= new ServerSocket(0);
      port = socket.getLocalPort();
      socket.close(); 
    } catch (Exception e) { port = -1; }
    return port;    
  } 
Run Code Online (Sandbox Code Playgroud)

(这里有一些相关的问题在SO - 例子).

我不明白的原因是,为什么(或者是否)对这种方法的两次成功调用保证返回两个不同的端口.例如,这里假设(搜索findFreePort方法调用).

它是否正确?

java sockets tcp

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

在.Net中使用Random的并发问题?

我用Paint.Net插件调试了一些问题,当有几个线程从单个实例调用一个方法时,我偶然发现了Random类的一些问题.

出于一些奇怪的原因,似乎如果我不阻止并发访问,通过同步被调用的方法,我的Random实例开始表现......随机(但在不好的意义上).

在下面的示例中,我创建了几百个线程,它们可以重新调用一个Random对象.当我运行它时,我有时(不总是,但几乎)得到明显错误的结果.如果我取消注释Synchronized方法注释,问题永远不会发生.

using System;
using System.Threading;
using System.Runtime.CompilerServices;
namespace testRandom {

    class RandTest  {
        static int NTIMES = 300;

        private long ac=0;

        public void run() { // ask for random number 'ntimes' and accumulate
            for(int i=0;i<NTIMES;i++) {
                ac+=Program.getRandInt();
                System.Threading.Thread.Sleep(2);
            }
        }

        public double getAv() { 
            return ac/(double)NTIMES; // average
        }
    }

    class Program
    {

        static Random random = new Random();
        static int MAXVAL = 256;
        static int NTREADS = 200;

        //[MethodImpl(MethodImplOptions.Synchronized)]
        public static int getRandInt() …
Run Code Online (Sandbox Code Playgroud)

.net c# random concurrency

6
推荐指数
2
解决办法
1049
查看次数

NSIS:在编译时使用环境变量?

如果我没有弄错的话,所有关于NSIS docs(例如ReadEnvStr)中的环境变量(EV)的讨论都会处理目标计算机中的EV:所有这些都发生在安装时.

我想知道在编译时是否支持在开发人员(构建)机器上访问EV .具体来说,假设我有

!define SRCDIR "C:\progs\version1\src"

...
File /r "${SRCDIR}\*.*" 
Run Code Online (Sandbox Code Playgroud)

而我宁愿写信

!define SRCDIR "%{PROG_DIR}\src"
Run Code Online (Sandbox Code Playgroud)

(或类似的东西),其中PROG_DIR是环境变量.可以这样做吗?

nsis environment-variables

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

React 中如何使用布尔属性?

我试图澄清一些关于 React 中布尔属性的混淆(最好来自权威​​来源)。

假设有MyComponent几个布尔道具prop1prop2...

首先:似乎布尔道具就像其他道具一样:您可以在defaultProps 或解构 params 中定义默认值:

const MyComponent = ({ prop1, prop2 }) => (
   ...
)

MyComponent.defaultProps = {
  prop1: false,
  prop2: true,
}
Run Code Online (Sandbox Code Playgroud)

或者等效地(不?)

const MyComponent = ({ prop1 = false, prop2 = true }) => (
 ...
) 
Run Code Online (Sandbox Code Playgroud)

不清楚的是如何传递值。再一次,自然的“React 风格”似乎是

  <MyComponent prop1={ BOOLEAN_EXPRESION1 } prop2={ BOOLEAN_EXPRESION2 } />
Run Code Online (Sandbox Code Playgroud)

...包括静态文字( false/true)。

但是,它还指出传递布尔属性的正确(推荐?)方法是属性的存在/不存在,正如HTML5 规定的那样

所以,而不是<MyComponent prop1={true} prop2={false} />,应该写<MyComponent prop1 …

boolean jsx reactjs react-props

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

如何在 Formik 提交验证之前清除状态?

我正在使用 Formik 和 yup 验证,遵循以下模式:

const handleSubmit = async (values, { setStatus }) => {
  setStatus(''); // clean errors messages
  try {
    ... do submit work ...
      const res = await sendData( convertValues(values)); //
    ... more work
  } catch (e) {
    console.error(e);
    setStatus('an error occurred '...);
  }
};

const validationSchema = Yup.object({
  code: Yup.string().required(t('Required')),
  ....
});

return (
    <Formik onSubmit={handleSubmit} initialValues={initialValues} validationSchema={validationSchema}>
      {({ setFieldValue, status }) => (
        <Form>
          ....
          <MyErrorComponent msg={status} />
        </Form>
      )}
    </Formik>
);
Run Code Online (Sandbox Code Playgroud)

这在这种情况下有问题:

  1. 用户提交表单。验证通过,但内部出现一些错误handleSubmit …

reactjs formik

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

在DOS中用C语言进行串行编程

我需要在旧的16位MS-DOS中用C进行一些基本的串行编程.我知道基础知识,我编写了一些串行通讯.在几十年前的某个微控制器中,但现在已经是古老的知识了,找到信息并不容易.我正在寻找一些可靠的(不一定是免费或开源)库或代码,以及一般信息.

假设我正在使用Win7机器进行开发,我也在寻找有关如何测试它的一些说明/建议.例如,如果可以模拟从我的Win7机器中的控制台终端到在DOSBOX环境中运行我的DOS程序的模拟COM端口的零调制解调器连接,或类似的东西.

c serial-port dos

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

如果未找到引用的Java类或列入黑名单,何时检测到此类?

我想在Google appengine中使用一个小型图书馆; 其中一个类(比如说MyClass.writeToFile())使用的方法之一,java.io.FileOutputStream在列入黑名单的类中(好吧,不是白名单).

这是否意味着MyClass在类加载时会失败,或者只是在(如果)我尝试调用违规方法时会失败?在什么时候检查("FileOutputStream不允许")完成?当加载MyClass文件并检测到它"引用/依赖于"FileOutputStream时(我不知道这是否在MyClass 字节码中声明)?或者在 第一次FileOutputStream调用时尝试加载MyClass.writeToFile()

此外,假设该方法MyClass.writeToFile()对我的库不是必不可少的(但是MyClass),是否有一些解决方法,或者应该重构库(并构建,比如两个不同的罐子,一个完整的成熟和其他适合沙盒的)?

java google-app-engine classloader

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

Deflater.setLevel()有效吗?

Deflater.setLevel()对我来说不能正常工作.

static void test1() throws Exception {
     byte[] output = new byte[20];
     Deflater compresser = new Deflater();
     // compresser.setLevel(Deflater.BEST_COMPRESSION);
     compresser.setInput("blah".getBytes("UTF-8"));
     compresser.finish();
     int len = compresser.deflate(output);
     System.out.println("len="+ len+ " " +Arrays.toString(output));
}
Run Code Online (Sandbox Code Playgroud)

上面的工作对我来说没问题(Java 7),但是当我取消注释该compresser.setLevel()行时,它会中断(deflate()返回0个字节).任何压缩级别都会发生同样的情况,除了DEFAULT.更具体地说,当级别集与构造函数中设置的(显式或隐式,如此处)相同时,它只"工作"(相反,它是无害的) - 也就是说,它只能在它无用时才能使用.

请参阅Ideone上的示例.

这个问题指出了同样的问题,并且接受的答案基本上说:不要用setter设置级别,在构造函数中执行.远非令人满意,IMO - 为什么setLevel()存在?它坏了还是我们错过了什么?

java deflate

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

OutputStreamWriter内部缓冲区大小

我想创建一个无缓冲的OutputStreamWriter.该文档(Java 7中)说

生成的字节在写入底层输出流之前累积在缓冲区中.可以指定此缓冲区的大小,但默认情况下,它足够大,可用于大多数用途.

"可以指定此缓冲区的大小"......怎么样?

(编辑:这是文档中的旧错误;在Java 9中修复)

java java-io

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

如何在 Pipfile 中指定特定于平台的附加功能或版本?

文档“的Pipenv高级用法”,在“指定基本上什么”一节中,介绍了如何包括包装的要求,有条件的操作系统平台,在Pipfile,如:

pywinusb = {version = "*", sys_platform = "== 'win32'"}
Run Code Online (Sandbox Code Playgroud)

根据平台的不同,当想要为包指定不同的版本或选项时,不清楚该怎么做。

具体来说,我有这个要求:

faust = {version=">=1.10.1", extras=["aiodns", "ciso8601", "cython"]}
Run Code Online (Sandbox Code Playgroud)

我想排除ciso8601Windows 中的可选附加项。

如果我写

faust = {version=">=1.10.1", extras=["aiodns", "ciso8601", "cython"], platform_system = "!= 'Windows'"}
faust = {version=">=1.10.1", extras=["aiodns", "cython"], platform_system = "== 'Windows'"}
Run Code Online (Sandbox Code Playgroud)

我收到错误: tomlkit.exceptions.KeyAlreadyPresent: Key "faust " already exists.

另外,我想在setup.py(install_requires部分) 中做同样的事情。

python pip pipenv pipenv-install

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