Skip to content

pjstadig/nio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Clojure support for java.nio.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •