从InputStream读取直到双引号

时间:2013-03-16 15:39:52

标签: java byte inputstream quotes

需要帮助从InputStream读取到引号之前的字节列表。 问题是,InputStream读取字节,我不知道如何在达到引号时停止读取...我想到这样的事情:

public static List<Byte> getQuoted(InputStream in) throws IOException {
    int c;
    LinkedList<Byte> myList = new LinkedList<>();
    try {
    while ((in.read()) != "\"") {   ?????
        list.add(c)
    .....

while条件是个问题,当然引号是String,而int是预期的。

1 个答案:

答案 0 :(得分:2)

"\""是一个字符串。如果您只想要"的字符表示,请改用'"'

请注意,如果您的文件不是ASCII格式,您的代码将无法正常工作(并且不同字符集之间的行为将不一致)(它当然取决于您的期望)

如果是ASCII格式,每个字符将占用文件中的一个字节,InputStream::read()读取单个字节(因此只有一个ASCII字符),所以一切都能正常工作。

如果字符集中每个字符占用的字节数超过1个字节(例如Unicode),则每个读取的字符数将少于一个字符,并且您的代码可能无法按预期工作。

建议使用

Reader::read()(并使用Character而不是Byte),因为它会读取一个字符,而不仅仅是一个字节。

另外,您错过了作业:

while ((in.read()) != '"')

应该是

while ((c = in.read()) != '"')