used functions rather that properties for consistency on streams.reader/writer/buffered methods; also use UTF-8 charset by default

This commit is contained in:
James Strachan
2012-03-21 20:37:44 +00:00
parent d35b091262
commit 2e50a2332c
+23 -26
View File
@@ -5,8 +5,16 @@ import java.nio.charset.*
import java.util.NoSuchElementException import java.util.NoSuchElementException
import java.net.URL import java.net.URL
protected val defaultBufferSize: Int = 64 * 1024 /**
protected val defaultCharset: String = "UTF-8" * Returns the default buffer size when working with buffered streams
*/
public val defaultBufferSize: Int = 64 * 1024
/**
* Returns the default [[Charset]] which defaults to UTF-8
*/
public val defaultCharset: Charset = Charset.forName("UTF-8") ?: Charset.defaultCharset().sure()
/** Prints the given message to [[System.out]] */ /** Prints the given message to [[System.out]] */
inline fun print(message : Any?) { inline fun print(message : Any?) {
@@ -171,48 +179,36 @@ object: ByteIterator() {
} }
/** Creates a buffered input stream */ /** Creates a buffered input stream */
inline fun InputStream.buffered(bufferSize: Int) inline fun InputStream.buffered(bufferSize: Int = defaultBufferSize)
= if (this is BufferedInputStream) = if (this is BufferedInputStream)
this this
else else
BufferedInputStream(this, bufferSize) BufferedInputStream(this, bufferSize)
inline val InputStream.reader : InputStreamReader inline fun InputStream.reader(encoding: Charset = defaultCharset) : InputStreamReader = InputStreamReader(this, encoding)
get() = InputStreamReader(this)
inline val InputStream.bufferedReader : BufferedReader
get() = BufferedReader(reader)
inline fun InputStream.reader(encoding: Charset) : InputStreamReader = InputStreamReader(this, encoding)
inline fun InputStream.reader(encoding: String) = InputStreamReader(this, encoding) inline fun InputStream.reader(encoding: String) = InputStreamReader(this, encoding)
inline fun InputStream.reader(encoding: CharsetDecoder) = InputStreamReader(this, encoding) inline fun InputStream.reader(encoding: CharsetDecoder) = InputStreamReader(this, encoding)
inline val InputStream.buffered : BufferedInputStream
get() = if(this is BufferedInputStream) this else BufferedInputStream(this)
// inline val Reader.buffered : BufferedReader inline fun OutputStream.buffered(bufferSize: Int = defaultBufferSize) : BufferedWriter
// get() = if(this is BufferedReader) this else BufferedReader(this) = if (this is BufferedWriter) this else BufferedWriter(writer(), bufferSize)
inline fun Reader.buffered(): BufferedReader = if(this is BufferedReader) this else BufferedReader(this) inline fun OutputStream.writer(encoding: Charset = defaultCharset) : OutputStreamWriter = OutputStreamWriter(this, encoding)
inline fun Reader.buffered(bufferSize: Int) = BufferedReader(this, bufferSize)
inline val OutputStream.writer : OutputStreamWriter
get() = OutputStreamWriter(this)
inline val OutputStream.bufferedWriter : BufferedWriter
get() = BufferedWriter(writer)
inline fun OutputStream.writer(encoding: Charset) : OutputStreamWriter = OutputStreamWriter(this, encoding)
inline fun OutputStream.writer(encoding: String) = OutputStreamWriter(this, encoding) inline fun OutputStream.writer(encoding: String) = OutputStreamWriter(this, encoding)
inline fun OutputStream.writer(encoding: CharsetEncoder) = OutputStreamWriter(this, encoding) inline fun OutputStream.writer(encoding: CharsetEncoder) = OutputStreamWriter(this, encoding)
inline fun Reader.buffered(bufferSize: Int = defaultBufferSize): BufferedReader
= if(this is BufferedReader) this else BufferedReader(this, bufferSize)
inline fun Writer.buffered(bufferSize: Int = defaultBufferSize): BufferedWriter
= if(this is BufferedWriter) this else BufferedWriter(this, bufferSize)
inline fun Reader.forEachLine(block: (String) -> Unit): Unit { inline fun Reader.forEachLine(block: (String) -> Unit): Unit {
this.use{ this.use{
@@ -225,6 +221,7 @@ inline fun Reader.forEachLine(block: (String) -> Unit): Unit {
} }
inline fun <T> Reader.useLines(block: (Iterator<String>) -> T): T = this.buffered().use<BufferedReader, T>{block(it.lineIterator())} inline fun <T> Reader.useLines(block: (Iterator<String>) -> T): T = this.buffered().use<BufferedReader, T>{block(it.lineIterator())}
/** /**
* Returns an iterator over each line. * Returns an iterator over each line.
* <b>Note</b> the caller must close the underlying <code>BufferedReader</code> * <b>Note</b> the caller must close the underlying <code>BufferedReader</code>