小编Dav*_*ann的帖子

Java lambda具有与匿名内部类不同的变量要求

我有一个匿名的内部类和一个等效的lambda.为什么变量初始化规则对lambda更严格,是否有比匿名内部类更清晰的解决方案或在构造函数中初始化它?

import java.util.concurrent.Callable;

public class Immutable {
    private final int val;

    public Immutable(int val) { this.val = val; }

    // Works fine
    private final Callable<String> anonInnerGetValString = new Callable<String>() {    
        @Override
        public String call() throws Exception {
            return String.valueOf(val);
        }
    };

    // Doesn't compile; "Variable 'val' might not have been initialized"
    private final Callable<String> lambdaGetValString = () -> String.valueOf(val);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我确实遇到了一个解决方法:使用getter for val.

java lambda anonymous-inner-class

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

Python请求base64图像

requests用来从远程URL获取图像.由于图像总是16x16,我想将它们转换为base64,以便我可以稍后嵌入它们以在HTML img标记中使用.

import requests
import base64
response = requests.get(url).content
print(response)
b = base64.b64encode(response)
src = "data:image/png;base64," + b
Run Code Online (Sandbox Code Playgroud)

输出response是:

response = b'GIF89a\x80\x00\x80\x00\xc4\x1f\x00\xff\xff\xff\x00\x00\x00\xff\x00\x00\xff\x88\x88"""\xffff\...
Run Code Online (Sandbox Code Playgroud)

HTML部分是:

<img src="{{src}}"/>
Run Code Online (Sandbox Code Playgroud)

但图像不显示.

我怎样才能正确地对64进行编码response

python base64 data-uri python-requests

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

对Java 8中的日志记录进行延迟评估

当您拥有的价值高于计算成本时,您在日志记录框架中看到的常见模式是

if (log.isDebugEnabled()) {
    String value = expensiveComputation();
    log.debug("value: {}", value);
}
Run Code Online (Sandbox Code Playgroud)

由于Java 8添加了lambdas,所以做得很好:

log.debug("value: {}", (Supplier<String>) this::expensiveComputation);
Run Code Online (Sandbox Code Playgroud)

几乎起作用,因为日志框架将对toString()参数执行.问题是toString()Supplier是在执行Object.

有没有办法提供一些懒惰地评估Logger方法的东西?它几乎只是Supplier一个默认toString()调用get().

java lambda lazy-evaluation

10
推荐指数
3
解决办法
3030
查看次数

使用OpenCL的GPU线程同步多核CPU线程

我一直在与使用OpenCL的多核CPU线程进行GPU线程同步.我确实看到了一些CUDA示例,但是,如果有人能够在OpenCL方面给我一些关于同步部分的提示,我会更清楚这个概念.提前感谢您对此事的任何帮助.

multithreading gpu opencl

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

JAXB和抽象类

我正在尝试使用JAXB来解组一些XML,但我得到了"无法创建...的实例"异常.我理解为什么 - 它试图创建一个抽象类的实例.我想要的是让它成为特定实现类的实例.我的目标是对setter方法进行特定于类的检查.也许"qux"是BarImpl的有效baz值,但BarImpl2想要做其他事情.

我通过不注释Foo来获得部分路径,但如果我不注意bar,事情就会变得难看.

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.junit.Test;


public class JAXBTest {

    @Test
    public void test() throws javax.xml.bind.JAXBException {
        String xml = 
            "<foo>" +
            "  <bar>" +
            "    <baz>qux</baz>" +
            "  </bar>" +
            "</foo>";

        javax.xml.bind.JAXBContext context = javax.xml.bind.JAXBContext.newInstance(
                FooImpl.class,
                BarImpl.class
        );

        javax.xml.bind.Unmarshaller unmarshaller = context.createUnmarshaller();

        unmarshaller.unmarshal(new java.io.StringReader(xml));
    }

    @XmlRootElement(name="foo")
    public static abstract class Foo {
        @XmlElement(name="bar")
        Bar bar;
    }

    @XmlRootElement(name="bar")
    public static abstract class Bar {
        @XmlElement(name="baz")
        String baz;
    }

    public static class FooImpl extends Foo { } …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb xml-serialization

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

编写跨平台 shell 脚本的最佳方法是什么

我有一个 shell 脚本,想在所有支持 bash 的多个平台上运行。我的问题是某些命令在 Linux、FreeBSD、OS X 和 Cygwin 上的行为不同。

到目前为止我的想法是:

  • 在主脚本中为所有特定于操作系统的操作创建函数的默认实现,然后检查$OSTYPE特定source于实现的文件(可选)替换行为不同的命令。如果我这样做,我应该如何处理带有多个参数的命令?传递给函数的四个位置参数并不是最简洁的方法。
  • 将所有实现放入我的脚本中,每个实现在名称中都有一个后缀,检查$OSTYPE并创建一个OPSUFFIX变量,然后调用operation$OPSUFFIX每个操作。
  • ./configure魔法?
  • 迁移到 Python 之类的东西——也许是最明智的,但需要最多的代码更改。如果这是一个惯用的初始化脚本,那么这不是一个选项。

bash shell cross-platform

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

io.grpc.StatusRuntimeException:从 App Engine 查询 Secret Manager 时出现 DEADLINE_EXCEEDED

我尝试使用listSecrets()App Engine 应用程序在 Secret Manager 中列出机密,但 grpc 请求在 60 秒后始​​终超时:

com.google.api.gax.rpc.DeadlineExceededException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline exceeded after 59.973305176s.
        at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:51)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
        at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
        at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
        at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1074)
        at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
        at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
        at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
        at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:771)
        at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:563)
        at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:533)
        at io.grpc.internal.DelayedClientCall$CloseListenerRunnable.runInContext(DelayedClientCall.java:406)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
        Suppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed
Run Code Online (Sandbox Code Playgroud)

我验证了我可以使用 App Engine 中的其他 GCP 服务,并且我的 App Engine 默认服务帐户具有 Secret Manager 角色。我的应用程序是标准环境中的第二代 Java 11 应用程序。我正在使用libraries-bom(最新的)v23.0.0。当我在本地运行相同的代码时,它工作正常,并且不会超过几秒钟,所以我想知道这是否是 App Engine 环境或其服务帐户的问题。

更新:我最终使用了 google-api-services-secretmanager/google-api-client/google-auth-library-oauth2-http。这个片段在本地和 …

google-app-engine google-cloud-platform google-secret-manager

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

Javascript中的命名函数在声明之前可访问,但函数文字不是

我试图弄清楚它是如何工作的.当我引用一个尚未声明的命名Javascript函数时,在某些情况下,它可以工作.但是,如果我使用函数文字,它不会,但它也不会失败ReferenceError.

function works() {
    var works_ref = foo;
    function foo() {
        console.log('ok');
    };
    console.log('works ' + works_ref);
}

function fails() {
    var fails_ref = foo;
    var foo = function() {
        console.log('ok');
    };
    console.log('fails ' + fails_ref);
}

works();
fails();
Run Code Online (Sandbox Code Playgroud)

这回来了

"works function foo() {
            console.log('ok');
        }"
"fails undefined"
Run Code Online (Sandbox Code Playgroud)

我想知道第一个例子是如何工作的 - 这是一个解释语言,没有编译,所以我希望任何类型的前向引用都会失败 - 为什么第二个例子不能生成ReferenceError

javascript function-literal

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

mapreduce工作的链接

我遇到了"mapreduce工作的链接".作为mapreduce的新手,在什么情况下我们必须链接(我假设链接意味着一个接一个地依次运行mapreduce作业)工作?

有没有可以提供帮助的例子?

hadoop mapreduce

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

惯用Python:文字中的`in`关键字

in文字上使用运算符时,对于该文字来说,最常用的是列表,集合还是元组?

例如

for x in {'foo', 'bar', 'baz'}:
    doSomething(x)

...

if val in {1, 2, 3}:
    doSomethingElse(val)
Run Code Online (Sandbox Code Playgroud)

我没有看到列表有任何好处,但是元组的不可变性意味着它可以由高效的解释器提升或重用.if如果是,如果它被重用,那么效率就会受益.

哪个是最惯用的,哪个在cpython中表现最好?

python idiomatic

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

BigQuery 用户定义函数中的 Base64 编码

BigQuery 将 Javascript 用于其用户定义的函数。BYTESBigQuery 中的输入和输出在 Javascript 中与 base64 编码的字符串相互映射。

BigQuery的没有浏览器的window对象,所以atobbtoa失踪。在 Bigquery JS 环境中是否有一种简单的编码和解码方法,或者您是否必须包含一个用于进行映射的库?

javascript base64 user-defined-functions google-bigquery

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