如何创建char []数组

时间:2014-04-27 00:35:37

标签: jython

我正在尝试从Jython中分配一个Java char数组,该数组将由Java库填充。我想从Jython中做相同的事情:

char[] charBuffer = new char[charCount];

我已经阅读了arrayjarray模块的文档(我认为它们是相同的),但我不完全确定我想使用哪种类型的代码。这两个文件似乎有点矛盾,但较新的数组模块似乎更正确。 根据Java documentationchar是“16位Unicode字符”(2个字节)。

因此,如果我检查以下类型代码:

>>> array.array('c').itemsize # C char, Python character
1
>>> array.array('b').itemsize # C signed char, Python int
1
>>> array.array('B').itemsize # C unsigned char, Python int
2
>>> array.array('u').itemsize # C Py_UNICODE, Python unicode character
4
>>> array.array('h').itemsize # C signed short, Python int
2
>>> array.array('H').itemsize # C unsigned short Python int
4

我觉得奇怪的是BH的大小是签名对手bh的两倍。我可以安全可靠地使用16位B(无符号字符)或h(带符号短整数)来表示Java char吗?或者,如果使用 array 模块是完全错误的,请告诉我。

1 个答案:

答案 0 :(得分:1)

简短的回答是:使用' c'

在幕后,jython正在为您转换数据类型。

您可以通过某些测试进行验证。有一个java.nio.CharBuffer类,带有一个方法wrap(),它接受一个char []数组。观察jython数组类型' c'在其他一切都失败的情况下工作:

>>> import array
>>> from java.nio import CharBuffer

>>> array.array('c', 'Hello World')
array('c', 'Hello World')
>>> CharBuffer.wrap( array.array('c', 'Hello World') )
Hello World

>>> array.array('b','Hello World')
array('b', [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100])
>>> CharBuffer.wrap( array.array('b', 'Hello World') )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: wrap(): 1st arg can't be coerced to char[], java.lang.CharSequence

>>> array.array('u', u'Hello World') 
array('u', u'Hello World')
>>> CharBuffer.wrap( array.array('u', u'Hello World') )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: wrap(): 1st arg can't be coerced to char[], java.lang.CharSequence