小编mac*_*021的帖子

将Google Cloud Vision API与简单的API密钥配合使用

我正在使用此处记录的Google Cloud Vision Java API客户端:https://cloud.google.com/vision/docs/reference/libraries.

如果我通过将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为引用右侧"服务帐户"的json文件来使用隐式默认凭据,则以下快速入门代码可以正常工作.

// Imports the Google Cloud client library
import com.google.cloud.vision.spi.v1.ImageAnnotatorClient;
import com.google.cloud.vision.v1.AnnotateImageRequest;
import com.google.cloud.vision.v1.AnnotateImageResponse;
import com.google.cloud.vision.v1.BatchAnnotateImagesResponse;

...


public class QuickstartSample {
  public static void main(String... args) throws Exception {
    // Instantiates a client
    ImageAnnotatorClient vision = ImageAnnotatorClient.create();

    ...

    BatchAnnotateImagesResponse response = vision.batchAnnotateImages(requests);
    List<AnnotateImageResponse> responses = response.getResponsesList();

    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想使用简单的(单字符串)API密钥而不是服务帐户对API进行身份验证,我找不到解释如何通过此Java库执行此操作的文档.可能吗?

java google-api api-key google-cloud-vision

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

如果有的话,我可以如何提高我在Clojure中的数值表现?

这是一个简短的Scala程序,它通过生成一组随机数来计算Euler数的差的近似值:

package example

import scala.util.Random

object ApproxE extends App {

   def calc = {
     var S = 0.0
     for {i <- 1 to 100000000} {
       var x = 0.0
       var t = 0
       while (x <= 1.0) {
         x += Random.nextDouble
         t += 1
       }
       S += t
     }
     S / 100000000
  }

  val st = System.currentTimeMillis()
  val e = calc
  val ed = System.currentTimeMillis()

  println(e)
  println(ed - st)

}
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上运行,它在大约7秒内完成计算.

以下是两个等效的Clojure函数.在48秒内返回,在230秒内返回.

在纯Clojure中,是否有可能编写一个性能与Java或Scala中可实现的性能相当的等效程序?

48S:

(defn calc []
    (loop [i (int …
Run Code Online (Sandbox Code Playgroud)

performance clojure

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

使用 invokespecial 调用公共方法?

任何能回答这个问题的人都知道,JVM 支持多种字节码指令来调用方法(invokevirtual, invokespecial, invokestatic, ...)

对实例方法的大多数方法调用是由 进行的invokevirtual,但私有方法和初始化方法是通过 调用的invokespecial,如 JVM 规范中所述:

invokespecialinvokevirtual指令的区别在于invokevirtual根据对象的类调用方法。该invokespecial指令用于调用实例初始化方法以及当前类的超类的私有方法和方法。

据我了解,invokevirtual执行 vtable 查找来解析方法 while invokespecial,因为在链接时知道正确的方法实现,静态解析。

我的问题是,为什么在编译时已知方法所有者的具体类的情况下invokespecial不用于调用public方法?在我看来,出于效率原因,避免 vtable 查找是可取的。但很明显,我对 JVM 有一些不了解。

jvm

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