我有一个像这样的字节数组:
(def byte-arr (byte-array (map byte "This is a test"))) ; => #<byte[] [B@63465272>
打电话时.toString
我得到[B@1b96107b
. 在这种情况下,是否可以覆盖.toString
clojure 类型的 -Method[B
来获取This is a test
?
我有一个像这样的字节数组:
(def byte-arr (byte-array (map byte "This is a test"))) ; => #<byte[] [B@63465272>
打电话时.toString
我得到[B@1b96107b
. 在这种情况下,是否可以覆盖.toString
clojure 类型的 -Method[B
来获取This is a test
?
全局假设所有字节数组都是可打印的字符串是一个坏主意,因此仅使用 String 构造函数的建议是正确的。也就是说,您可以按类型在全球范围内添加新的打印。
打印函数最终会演变为调用其中一个print-method
或多个方法print-dup
,具体取决于是否*print-dup*
为真。您可以使用core_print.clj中的帮助函数添加新方法,print-method
如下所示:print-sequential
(in-ns 'clojure.core)
(def ^:private ByteArray (type (byte-array 0)))
(defmethod print-method ByteArray [ba ^Writer w]
(print-sequential "[" pr-on " " "]" ba w))
请注意,这只是打印一个字节数组,就好像它是一个字节向量:
clojure.core=> (in-ns 'user)
#<Namespace user>
user=> (byte-array (map byte "This is a test"))
[84 104 105 115 32 105 115 32 97 32 116 101 115 116]
我不建议覆盖 toString。这是太多的全局变化,你可能会破坏一些依赖于默认行为的东西。
为什么不为您的特定要求创建一个函数?
只需使用该字节数组构造一个 String对象:
(println (String. byte-arr))