我的文字中包含内容
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]
有人可以建议原因吗?
答案 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时没有看到确切的内容,则是显示它的工具的错误。