以下示例使用kotlin写的,java也是一样的方法
①如果使用reader的话,注意要在获取流的时候就设置编码为GBK,因为cmd默认是GBK编码,获取之后在转换是没用的
val command = "ping www.baidu.com"
val process = Runtime.getRuntime().exec(command)
val reader = BufferedReader(InputStreamReader(process.inputStream, charset("GBK")))
while (true){
val x = reader.readLine()?:break
}
②直接操作InputStream:
a.用byte数组承接:(注意:这种方式如果byte数组不够大的话,可能会出现把一个汉字切两半导致乱码问题)
val inputStream = process.inputStream
val builder = java.lang.StringBuilder()
val bytes= ByteArray(32)
val byteArrayOutputStream = ByteArrayOutputStream()
while (true){
val len = inputStream.read(bytes)
if (len ==-1) break else builder.append(String(bytes, 0,len,charset("GBK")))
}
println(builder.toString())
b.用byteArrayoutputStream(推荐)
val inputStream = process.inputStream
val byteArrayOutputStream = ByteArrayOutputStream()
while (false){
val i = inputStream.read()
if (i ==-1) break else byteArrayOutputStream.write(i)
}
val byteArray = byteArrayOutputStream.toByteArray()
println(String(byteArray, charset("GBK")))
c.kotlin有个inputStream.readBytes()可以一次全部读取
val readBytes = inputStream.readBytes()
println(String(readBytes, charset("GBK")))