Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android BufferedWriter#写入(int)javadoc查询_Android_Encoding_Character Encoding_Bufferedwriter - Fatal编程技术网

Android BufferedWriter#写入(int)javadoc查询

Android BufferedWriter#写入(int)javadoc查询,android,encoding,character-encoding,bufferedwriter,Android,Encoding,Character Encoding,Bufferedwriter,这方面的报告说: 只写入整数oneChar的下两个字节。 这对写入已转换为int的非utf8编码字符有什么影响(如果有) 更新: 所讨论的代码从套接字接收数据并将其写入文件。(很多事情发生在接收和写入之间,所以我不能只使用使用BufferedReader#readLine()得到的字符串)。我使用的是Writer#write(char[]),但这意味着每次我都必须创建一个新的char数组。为了避免每次都创建一个数组,我使用了一个字符数组,其中填充了-1(强制转换为字符) 然后我使用填充它,必要时

这方面的报告说:

只写入整数oneChar的下两个字节。

这对写入已转换为int的非utf8编码字符有什么影响(如果有)

更新:

所讨论的代码从套接字接收数据并将其写入文件。(很多事情发生在接收和写入之间,所以我不能只使用使用BufferedReader#readLine()得到的字符串)。我使用的是Writer#write(char[]),但这意味着每次我都必须创建一个新的char数组。为了避免每次都创建一个数组,我使用了一个字符数组,其中填充了-1(强制转换为字符)

然后我使用填充它,必要时扩展数组。对于写入,我在数组中循环,写入写入器直到char[I]=(char)-1==true。

内部,
write(int)
将其参数强制转换为
char
,因此
write(I)
相当于
write((char)I)

现在在Java中,内部
char
只是一个整数类型,范围为0-65535(即16位)。强制转换int->char是一个“缩小原语转换”(),而
int
是一个有符号整数,因此:

符号的缩小转换 整数转换为整数类型T 丢弃除n个最低顺序以外的所有顺序 位,其中n是位的数量 用于表示T型。此外 可能会丢失信息 关于数值的大小 值,这可能会导致 结果值与 输入值的符号

这就是为什么Javadoc说只写入较低的两个字节

现在,就字符而言,这意味着什么取决于您想要如何解释int值。Java中的
char
表示UTF-16中的Unicode代码点,即由char表示的16位数字被解释为Unicode代码点的数字。因此,如果您的每个int值都是16位代码点的数字,您就没事了(实际上,这仅适用于BMP中的字符;如果您在补充平面中使用字符,则每个Unicode代码点将被编码为两个
char
s)。如果是其他任何东西(包括超过16位的代码点、负数或其他完全不同的东西),您将得到垃圾

如果有的话,这对你有什么影响 正在写入已删除的非utf8字符 转换成整数


没有“非utf8字符”这样的东西。UTF-8是一种编码,这是一种表示Unicode代码点的方法,因此提出的问题毫无意义。也许你可以解释一下你的代码是做什么的?

我不理解你的更新。TextUtils#getChars从CharacterSequence获取其输入。为什么不直接使用Writer#append(CharSequence)编写字符序列呢?通常的方法是使用Reader#readLine()读取,然后使用Writer.append编写。如果由于代码的工作方式而无法做到这一点,则需要针对您的问题发布一个自包含的代码示例。否则就不可能理解您的约束并找到不同的解决方案。Writer#append(charsequence)在编写之前使用toString,我不想每次都创建一个新字符串。在readline()和写入文件之间,解析器用于解析字符串、添加格式和对字符串执行各种操作。写入仅在由应用程序状态和消息类型确定的特定情况下发生,因此必须从解析器内部进行。我的问题是,我可以从一个,比如说iso-8859-1编码的字符串中提取字符,将它们转换为int而不丢失任何数据吗。