2013-03-16 105 views
0

需要帮助从InputStream读取字节列表直到引号。 问题是,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

的'InputStream'不能包含引号。 InputStream处理*字节*,引号是*字符*。你需要弄清楚你是在处理二进制数据还是字符数据。如果你正在处理字符数据,你应该使用'Reader'。 – 2013-03-16 15:45:29

回答

2

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

注意,当你想到,如果你的文件不是ASCII格式(和行为会有所不同字符集之间不一致),你的代码将无法​​正常工作(当然,这也取决于你所期望的)。

如果在ASCII中,每个字符将在文件中占用一个字节,并且InputStream::read()读取一个字节(因此是单个ASCII字符),所以一切都会正常工作。

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

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

而且,你错过了一个任务:

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

应该

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

thnx很多我现在得到它:) – user2177334 2013-03-17 08:06:28

+0

@ user2177334如果您发现它有帮助,请记住[upvote and/or accept](http://meta.stackexchange.com/a/168143/206447)这个答案。 – Dukeling 2013-03-17 11:52:43