[jOOQ/jOOQ#12667] Add also Source.of(Reader, int)

This commit is contained in:
Lukas Eder 2021-11-26 09:49:32 +01:00
parent 161750e835
commit 3aa78a1b42

View File

@ -158,35 +158,42 @@ public final class Source {
* Create a source from a reader.
*/
public static final Source of(Reader reader) {
return new Source(null, null, null, null, null, reader, null, null, -1);
return of(reader, -1);
}
/**
* Create a source from a reader.
*/
public static final Source of(Reader reader, int length) {
return new Source(null, null, null, null, null, reader, null, null, length);
}
/**
* Create a source from an input stream.
*/
public static final Source of(InputStream inputStream) {
return new Source(null, null, null, null, null, null, inputStream, null, -1);
return of(inputStream, -1);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, String charsetName) {
return new Source(null, null, charsetName, null, null, null, inputStream, null, -1);
return of(inputStream, -1, charsetName);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, Charset charset) {
return new Source(null, null, null, charset, null, null, inputStream, null, -1);
return of(inputStream, -1, charset);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, CharsetDecoder charsetDecoder) {
return new Source(null, null, null, null, charsetDecoder, null, inputStream, null, -1);
return of(inputStream, -1, charsetDecoder);
}
/**
@ -233,7 +240,10 @@ public final class Source {
else
return inputStreamReader(new ByteArrayInputStream(bytes));
else if (reader != null)
return reader;
if (length > -1)
return new LengthLimitedReader(reader, length);
else
return reader;
else if (inputStream != null)
if (length > -1)
return inputStreamReader(new LengthLimitedInputStream(inputStream, length));
@ -262,6 +272,33 @@ public final class Source {
public int read() throws java.io.IOException {
return length --> 0 ? is.read() : -1;
}
@Override
public void close() throws java.io.IOException {
is.close();
}
}
static class LengthLimitedReader extends Reader {
final Reader reader;
int length;
LengthLimitedReader(Reader reader, int length) {
this.length = length;
this.reader = reader;
}
@Override
public int read(char[] cbuf, int off, int len) throws java.io.IOException {
int r = length > 0 ? reader.read(cbuf, off, Math.min(length, len)) : -1;
length -= len;
return r;
}
@Override
public void close() throws java.io.IOException {
reader.close();
}
}
/**