Clojure support for java.nio.
Clojure
Latest commit 0a4b16b Oct 15, 2015 @pjstadig Version 1.0.5-SNAPSHOT
Permalink
Failed to load latest commit information.
src/nio
test
.gitignore
CHANGELOG.org
README.org
project.clj

README.org

nio

Clojure support for java.nio.

Extends clojure.java.io’s input-stream, output-stream, and copy functions to java.nio classes.

Defines new coercion functions buffer, byte-buffer, char-buffer, double-buffer, float-buffer, int-buffer, long-buffer, short-buffer, channel, readable-channel, and writable-channel. These functions are implemented for many of the Classes you would expect.

Also defines a function mmap to memory map a file.

Additionally, there are three functions buffer-seq, buffer-nth, and buffer-to-array intended to make it a little easier to integrate java.nio classes into Clojure. Hopefully, these will become obsolete by rolling their functionality into the clojure.core.

For additional functions to work with ByteBuffers, you can also use https://github.com/geoffsalmon/bytebuffer.

Dependency information

Leiningen dependency information:

[nio "1.0.3"]

Maven dependency information:

<dependency>
  <groupId>nio</groupId>
  <artifactId>nio</artifactId>
  <version>1.0.3</version>
</dependency>

Examples

The recommended way to use nio at the REPL is:

(require '[nio.core :as nio])

And similarly for your ns imports.

There are coercion functions for java.nio.Buffer and java.nio.channels.Channel types:

(nio/char-buffer (nio/byte-buffer (into-array Byte/TYPE [0 102 111 111])))
(nio/char-buffer "a string")
(nio/channel (io/file "/home/paul/.bashrc"))
(nio/readable-channel (nio/buffer (into-array Byte/TYPE [1 2 3])))

There are two convenience functions for getting and setting the byte order of a ByteBuffer:

(byte-order (ByteBuffer/allocate 32))
(set-byte-order! (ByteBuffer/allocate 32) :little-endian)

clojure.java.io’s functions work as you’d expect:

(io/input-stream (nio/channel "/home/paul/.bashrc"))
(io/input-stream (nio/byte-buffer (.getBytes "/home/paul/.bashrc")))
(io/copy (nio/channel "/home/paul/.bashrc") (nio/channel "/home/paul/.bashrc.bak"))

Memory mapping a file

(mmap "/home/paul/.bashrc")

You can also call mmap on a File or FileChannel. The File or FileChannel may be closed without affecting the mapping.

License

Copyright © 2012-2014 Paul Stadig.

Distributed under the Eclipse Public License, the same as
Clojure.