将输入流字节转换为字符

时间:2018-07-23 12:02:53

标签: java

我的文字中包含内容

12       13        14

文本在值12和13与13和14之间有8个空格

我的java方法通过一个参数接收文本作为输入流,并将每个内容存储在一个字节数组中,然后再将每个字节转换为一个字符

public class FileUpload implements RequestStreamHandler{

String fileObjKeyName = "sample1.txt";
String bucketName="";

/**
 * @param args
 */
 @Override
 public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {

        LambdaLogger logger = context.getLogger();

        byte[] bytes = IOUtils.toByteArray(inputStream);

        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder();
        sb.append("[ ");
        sb1.append("[ ");
        for (byte b : bytes) {
            sb.append(b);
            char ch = (char) b;
           sb1.append(ch);

        }
        sb.append("]");
        sb1.append("] ");

        logger.log(sb.toString());
        logger.log(sb1.toString()); 

  }
}

每个字节的小数表示形式正确打印如下

[ 4950323232323232323249513232323232323232324952]

但是,当转换为字符时,将仅转换两个值之间的一个十进制值'32'(用于空格),而跳过空格之间的所有剩余字节。

[ 12 13 14]

有人可以建议原因吗?

2 个答案:

答案 0 :(得分:1)

如何将字节转换为字符串?会是一样的。参见下面的代码:

public static void main(String[] args) {
    byte[] bytes = "12        13        14".getBytes();
    System.out.println(Arrays.toString(bytes));
    String str = new String(bytes,StandardCharsets.UTF_8);
    System.out.println(str);
}

答案 1 :(得分:0)

您的示例表明您使用的是AWS,您通常会使用支持HTML的工具来在线检查结果和生成的日志。

在HTML中,当您写几个连续的空格时,它们仅显示为一个。

带有Java的String对象确实包含8个空格。但是,当您将其提供给记录器以最终显示在网页中时,这些空格将被折叠并仅显示为一个。

这很容易证明:只需在方法末尾添加以下代码:

String s = sb1.toString();
logger.log("s length: " + s.length());
for(int i = 0; i < s.length(); i++) {
  logger.log("s[" + i + "]: " + s.charAt(i));
}

它演示了字符串的长度和确切内容。如果在显示String时没有看到确切的内容,则是显示它的工具的错误。