Dear list,

I am writing some functions to serialize and deserialize clojure data
structures,
but somehow they do not work and I am stuck.

The functions are as follows:

(use 'clojure.contrib.duck-streams)

(defn ser
  "Returns the string serialization of object o."
  [o]
  (binding [*print-dup* true] (pr-str o)))

(defn deser
  "Returns the deserialization (excecutes) of string s."
  [s]
  (load-string s))

(defn ser-to-file
  "Writes object o to file f."
  [o f]
  (spit f (ser o)))

(defn deser-from-file
  "Returns object stored in file f."
  [f]
  (deser (slurp f)))

With the above definitions, I can run the code below and it executes
correctly:

(ser-to-file [1 2 3] "my-file.txt") ;; Ok
(deser-from-file "my-file.txt") ;; Ok

But if instead of a small vector like [1 2 3]
I use a big one (say ten thousand entries),
I receive an error message:

(ser-to-file (into [] (range 10000)) "my-file.txt")      ;; Ok
(deser-from-file "my-file.txt")     ;; Error!
java.lang.ClassFormatError: Invalid method Code length 89867 in class
file user$eval__672 (NO_SOURCE_FILE:80)

Actually, I first tried with a vector of one million entries,
but it consumed a lot of memory.
I started making it smaller and smaller and, on my machine,
when the vector has a length of 7200, it works.
But when it is 7300, the error comes up.

I have tried it with clojure 1.0 and the latest 1.1 alpha in github,
both Vista and Ubuntu.

Looks like the problem is in the deserialization,
because if I look at "my-file.txt" the vector is written correctly.

I do not know what I am doing wrong.
If anybody could shed some light, I would be really grateful.
I am sorry if this seems like a simple issue or the solution is
obvious.

Thank you very much for your patience.

Paul.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to