【问题标题】:How do I get length of byte array returned by (.getBytes "string "UTF-8)?如何获取 (.getBytes "string "UTF-8) 返回的字节数组的长度?
【发布时间】:2023-03-05 20:22:01
【问题描述】:

关于 Java 互操作,我没有得到一些东西。我有一个字符 java.lang.String "x"。 Java 字符串有一个 getBytes 方法,其签名是public byte[] getBytes(String charsetName) throws UnsupportedEncodingExceptionhttps://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes(java.lang.String

该方法返回一个字节[]。 Java 数组有一个属性.length。为什么我会在 REPL 中收到 IllegalArgumentException?

(.length (.getBytes "x" "UTF-8"))
IllegalArgumentException No matching field found: length for class [B  clojure.lang.Reflector.getInstanceField (Reflector.java:271)

如何正确获取clojure中(.getBytes "x" "UTF-8")返回的字节数组的长度?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    clojure.core中有alength函数可以获取Java数组的长度

    (alength (.getBytes "x" "UTF-8"))
    ;;=> 1
    

    据我所知,Java 数组实际上并不是具有名为length 的字段的类,尽管Java 语法myarray.length 另有说明。获取数组的长度需要特殊的字节码指令,而不是典型的字段访问。这就是为什么在这种情况下 Clojure 中的字段访问互操作语法会导致异常。出于同样的原因,需要一个特殊用途的alength 函数。

    【讨论】:

    • 啊。它在那里。 “Java 数组并不是真正的类”。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多