📄 Update year in copyright line
[jSite.git] / src / main / java / de / todesbaum / util / io / LineInputStream.java
1 /*
2  * jSite - LineInputStream.java - Copyright Â© 2006–2019 David Roden
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  */
18
19 package de.todesbaum.util.io;
20
21 import java.io.FilterInputStream;
22 import java.io.IOException;
23 import java.io.InputStream;
24
25
26 /**
27  * @author David Roden <droden@gmail.com>
28  * @version $Id$
29  */
30 public class LineInputStream extends FilterInputStream {
31
32         private boolean skipLinefeed = false;
33         private StringBuffer lineBuffer = new StringBuffer();
34
35         /**
36          * @param in
37          */
38         public LineInputStream(InputStream in) {
39                 super(in);
40         }
41
42         public synchronized String readLine() throws IOException {
43                 lineBuffer.setLength(0);
44                 int c = 0;
45                 while (c != -1) {
46                         c = read();
47                         if ((c == -1) && lineBuffer.length() == 0)
48                                 return null;
49                         if (skipLinefeed && (c == '\n')) {
50                                 skipLinefeed = false;
51                                 continue;
52                         }
53                         skipLinefeed = (c == '\r');
54                         if ((c == '\r') || (c == '\n')) {
55                                 c = -1;
56                         } else {
57                                 lineBuffer.append((char) c);
58                         }
59                 }
60                 return lineBuffer.toString();
61         }
62
63 }