Good call. Got the time down with SBCL to 3.5 seconds.  So still more than twice Java.  ABCL with the same code with the big file (5.8G) is around 110+ seconds.

I'm still surprised by ABCL being SO much slower than SBCL especially with Java being faster than SBCL.

Thoughts?

Thanks,
Garrett.

P.S. I also took the "time" out, I am doing SBCL/ABCL the same way as I did in Java with the getting the start time before reading and getting the time after reading. and calculating the duration that way.  It didn't make any difference that I could see in the times.

Lisp code:
  (with-open-file (stream "/media/danger/OS/temp/great_expectations.iso"
 :element-type '(unsigned-byte 8)
 :external-format 'iso-8859-1) ; jars.txt iso-8859-1 also tried :default and the time was the same
 (let ((size (file-length stream))
(buffer-size (* 16 1024 1024)) ; 16M
(start (get-internal-real-time))
)
   (loop with buffer = (make-array buffer-size :element-type '(unsigned-byte 8))
 for n-characters = (read-sequence buffer stream)
 while (< 0 n-characters))
   (format t "took ~,2f secs" (/ (- (get-internal-real-time) start)
  internal-time-units-per-second))
   ))

On Fri, Oct 21, 2022 at 2:52 PM Pascal Bourguignon <pjb@informatimago.com> wrote:
Le 21/10/2022 à 23:18, Garrett Dangerfield a écrit :
> I tried changing (make-array buffer-size :element-type 'character)
> to
> (make-array buffer-size :element-type 'byte)
> and I got additional warnings and it took 70 seconds instead of 20.
>

You need to specify a binary file too!

(deftype octet () '(unsigned-byte 8))
(with-open-file (stream #P"~/Downloads/Discord.dmg"
                         :element-type 'octet
                         :external-format :default)
   (print `(size = ,(file-length stream)))
   (let ((buffer-size (* 16 1024 1024)))
     (time
      (loop with buffer = (make-array buffer-size :element-type 'octet)
            for n-bytes = (read-sequence buffer stream)
            while (plusp n-bytes)))))



--
__Pascal Bourguignon__