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