我从InputStream接收数据,我有一个ASCII字符11,它是一个垂直制表符。我可以在调试器中看到垂直选项卡11。一旦我尝试将该字符附加到StringBuilder,它就会被附加并且长度会增加。
然而,问题是当返回String时,ASCII字符会丢失,但在执行stringBuilder.toString()。toCharArray()时,可以看到ASCII字符11。
我需要在String中看到ASCII字符11。
public static void main(String[] args) {
// Receive data from InputStream
int read = inputStream.read();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append((char) read); // /u000b is ' '
stringBuilder.append("H");
System.out.println(stringBuilder.toString()); // prints H
char[] characters = stringBuilder.toString().toCharArray(); // length 2
}
如何实现这一目标?
编辑:
我需要在调试器中看到原始String中的ASCII字符。例如:
public String getOriginalString() {
return originalString;
}
public String process(String originalString) {
return modifiedString;
}
编辑:
public String buildMessage(InputStream inputStream) throws Exception {
StringBuilder message = null;
if(inputStream != null) {
message = new StringBuilder();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int byteRead = bufferedInputStream.read();
while(byteRead != -1) {
char value = (char) byteRead;
message.append(value);
// check how many bytes available
if(bufferedInputStream.available() != 0) {
byteRead = bufferedInputStream.read();
}
else {
// to avoid blocking of data
break;
}
}
}
char[] characters = message.toString().toCharArray(); // returns length 2
return message.toString();
}
public static void main(String[] args) {
String i = buildMessage(inputStream);
char[] characters = i.toCharArray(); // ASCII characters lost
StringBuilder stringBuilder = new StringBuider(i);
char[] characters2 = stringBuilder.toString().toCharArray(); // ASCII characters lost
}
答案 0 :(得分:2)
垂直制表符是空格,因此您无法“看到它”。您期望 垂直标签的视觉效果是什么?垂直制表符ASCII字符为a historical artefact,可以追溯到电传类型的日期。对于显示文本的VDU和windoing系统,它没有普遍接受的特殊含义。
答案 1 :(得分:1)
我猜,显示输出的控制台根本不支持该字符。不能将它传递给stdout或者结果字符串不包含你的角色。