Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!.POSTED!not-for-mail From: Jan Burse Newsgroups: comp.lang.java.programmer Subject: Re: Fav. Memory Stream Impl. Date: Sat, 28 Jan 2012 00:11:13 +0100 Organization: albasani.net Lines: 60 Message-ID: References: <2k81d7plm0k430r02uha1nl5m3lh37ko6o@4ax.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.albasani.net 1dVPv5uXGdzz/EOvMmeMXJ29bLackAKVWrcBdCm4DKqi4cOlthmYdIiezVuLpIYNtHBiphcijeYHjnx04JVlecWF0bXwvmBIjftlopSvbpgCzRDIpTZ2on2/DnIPI/l8 NNTP-Posting-Date: Fri, 27 Jan 2012 23:11:14 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="Gaag8mMeoRhfBnsoNq0ic7joxc8QOcokoTDwSBekTAd0A1j0HcGthysd4dxXA/kyw5f8xJeLXBh9AlKJlLjiSXxAXUk6cnb94+cZ9lyBSCUqesqHiL7G7+Hs/D9kqsFs"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20111221 Firefox/9.0.1 SeaMonkey/2.6.1 In-Reply-To: <2k81d7plm0k430r02uha1nl5m3lh37ko6o@4ax.com> Cancel-Lock: sha1:O3i8nROKusvGmrVtb/v2XfPFec8= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:11623 Roedy Green schrieb: > On Fri, 25 Nov 2011 18:39:23 +0100, Jan Burse > wrote, quoted or indirectly quoted someone who said : > >> Would be interested in a good memory stream >> implementation. Requirement will be multiple >> readers / writers and positioning. > > What do you use it for? What does it do for you? > Is it just an ram-resident InputStream? Dear All, I found an interesting implementation. On linux level there is ashmem for Android. And then on Java level there is an implementation of a class called MemoryFile. The memory file acts as a factory for input/output streams: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/os/MemoryFile.java#MemoryFile public InputStream getInputStream() { return new MemoryInputStream(); } public OutputStream getOutputStream() { return new MemoryOutputStream(); } The above two streams account for sequential access, and via mark/release some pseudo random access. But there is also an api for random access. Namely the following two beasts: public int readBytes(byte[] buffer, int srcOffset, int destOffset, int count); public void writeBytes(byte[] buffer, int srcOffset, int destOffset, int count) Compare to a normal read/write there is an additional parameter for the offset inside the memory file. But the implementation is not really light weight. Namely the memory file can shared accross processes, which I do not need: http://elinux.org/Android_Kernel_Features#ashmem But at least it gives an idea how to bootstrap a memory file implementation. Namely the input/output streams are implemented based on the read/write with the extra argument. Makes for examples mark/release quite simple.... Cool! Bye