[jOOQ/jOOQ#12667] Add Source.of(InputStream, int) to create length

limited input stream sources
This commit is contained in:
Lukas Eder 2021-11-26 09:14:32 +01:00
parent 96adaf0693
commit 161750e835

View File

@ -67,6 +67,7 @@ public final class Source {
private final Reader reader;
private final InputStream inputStream;
private final File file;
private final int length;
private Source(
String string,
@ -76,7 +77,8 @@ public final class Source {
CharsetDecoder charsetDecoder,
Reader reader,
InputStream inputStream,
File file
File file,
int length
) {
this.string = string;
this.bytes = bytes;
@ -86,13 +88,14 @@ public final class Source {
this.reader = reader;
this.inputStream = inputStream;
this.file = file;
this.length = length;
}
/**
* Create a source from a string.
*/
public static final Source of(String string) {
return new Source(string, null, null, null, null, null, null, null);
return new Source(string, null, null, null, null, null, null, null, -1);
}
/**
@ -106,84 +109,112 @@ public final class Source {
* Create a source from binary data using a specific character set.
*/
public static final Source of(byte[] bytes, String charsetName) {
return new Source(null, bytes, charsetName, null, null, null, null, null);
return new Source(null, bytes, charsetName, null, null, null, null, null, -1);
}
/**
* Create a source from binary data using a specific character set.
*/
public static final Source of(byte[] bytes, Charset charset) {
return new Source(null, bytes, null, charset, null, null, null, null);
return new Source(null, bytes, null, charset, null, null, null, null, -1);
}
/**
* Create a source from binary data using a specific character set.
*/
public static final Source of(byte[] bytes, CharsetDecoder charsetDecoder) {
return new Source(null, bytes, null, null, charsetDecoder, null, null, null);
return new Source(null, bytes, null, null, charsetDecoder, null, null, null, -1);
}
/**
* Create a source from a file.
*/
public static final Source of(File file) {
return new Source(null, null, null, null, null, null, null, file);
return new Source(null, null, null, null, null, null, null, file, -1);
}
/**
* Create a source from a file using a specific character set.
*/
public static final Source of(File file, String charsetName) {
return new Source(null, null, charsetName, null, null, null, null, file);
return new Source(null, null, charsetName, null, null, null, null, file, -1);
}
/**
* Create a source from a file using a specific character set.
*/
public static final Source of(File file, Charset charset) {
return new Source(null, null, null, charset, null, null, null, file);
return new Source(null, null, null, charset, null, null, null, file, -1);
}
/**
* Create a source from a file using a specific character set.
*/
public static final Source of(File file, CharsetDecoder charsetDecoder) {
return new Source(null, null, null, null, charsetDecoder, null, null, file);
return new Source(null, null, null, null, charsetDecoder, null, null, file, -1);
}
/**
* Create a source from a reader.
*/
public static final Source of(Reader reader) {
return new Source(null, null, null, null, null, reader, null, null);
return new Source(null, null, null, null, null, reader, null, null, -1);
}
/**
* 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);
return new Source(null, null, null, null, null, null, inputStream, null, -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);
return new Source(null, null, charsetName, null, null, null, inputStream, null, -1);
}
/**
* 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);
return new Source(null, null, null, charset, null, null, inputStream, null, -1);
}
/**
* 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);
return new Source(null, null, null, null, charsetDecoder, null, inputStream, null, -1);
}
/**
* Create a source from an input stream.
*/
public static final Source of(InputStream inputStream, int length) {
return new Source(null, null, null, null, null, null, inputStream, null, length);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, int length, String charsetName) {
return new Source(null, null, charsetName, null, null, null, inputStream, null, length);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, int length, Charset charset) {
return new Source(null, null, null, charset, null, null, inputStream, null, length);
}
/**
* Create a source from an input stream using a specific character set.
*/
public static final Source of(InputStream inputStream, int length, CharsetDecoder charsetDecoder) {
return new Source(null, null, null, null, charsetDecoder, null, inputStream, null, length);
}
/**
@ -197,11 +228,17 @@ public final class Source {
if (string != null)
return new StringReader(string);
else if (bytes != null)
return inputStreamReader(new ByteArrayInputStream(bytes));
if (length > -1)
return inputStreamReader(new ByteArrayInputStream(bytes, 0, length));
else
return inputStreamReader(new ByteArrayInputStream(bytes));
else if (reader != null)
return reader;
else if (inputStream != null)
return inputStreamReader(inputStream);
if (length > -1)
return inputStreamReader(new LengthLimitedInputStream(inputStream, length));
else
return inputStreamReader(inputStream);
else if (file != null)
return new BufferedReader(inputStreamReader(new FileInputStream(file)));
else
@ -212,6 +249,21 @@ public final class Source {
}
}
static class LengthLimitedInputStream extends InputStream {
final InputStream is;
int length;
LengthLimitedInputStream(InputStream is, int length) {
this.length = length;
this.is = is;
}
@Override
public int read() throws java.io.IOException {
return length --> 0 ? is.read() : -1;
}
}
/**
* Read the entire {@link #reader()} into a String, for convenience.
*