Android 2.1(API 7)中String转byte数组遇NoSuchMethodError如何解决?
Android API 7 下 String 转 ByteArray 的替代方案
问题场景
在 API 7 环境中执行以下 Kotlin 代码:
val string = "string" val bytes = string.toByteArray(Charset.forName("UTF-8"))
抛出异常:
java.lang.NoSuchMethodError: java.lang.String.getBytes
由于 String 转 byte 数组的标准方法从 API 8 才开始支持,需寻求不依赖该标准方法的转换方式。
可行解决方案
方案1:借助流实现 UTF-8 编码转换(推荐)
通过 ByteArrayOutputStream 和 OutputStreamWriter 手动完成编码,完全兼容 API 7:
fun String.toUtf8BytesApi7(): ByteArray { val outputStream = ByteArrayOutputStream() val writer = OutputStreamWriter(outputStream, "UTF-8") writer.write(this) writer.flush() return outputStream.toByteArray() } // 使用示例 val string = "string" val bytes = string.toUtf8BytesApi7()
方案2:调用 API 7 支持的无参 getBytes() 方法
注意:此方法使用系统默认编码,可能不是 UTF-8,仅在不要求固定编码时使用:
val bytes = string.getBytes()
方案3:通过 CharsetEncoder 实现编码转换
严格指定 UTF-8 编码的另一种实现方式:
fun String.toUtf8BytesWithEncoder(): ByteArray { val charset = Charset.forName("UTF-8") val encoder = charset.newEncoder() val charBuffer = CharBuffer.wrap(this) val byteBuffer = encoder.encode(charBuffer) return byteBuffer.array().copyOfRange(0, byteBuffer.limit()) }
内容的提问来源于stack exchange,提问作者Сергей Кириллов
相关产品推荐
相关产品推荐

