Skip to end of metadata
Go to start of metadata

Overview

A stream is a data type used to serially read and write bytes. The term "Stream", used generically, refers to a data type which implements a particular interface consisting of the methods that you would expect from a stream-like object, namely read(), write(), close(), isWritable(), and isReadable(). The Titanium Mobile SDK, starting with version 1.7.0, defines four types which implement this interface:

  • Titanium.Stream.BufferStream, an in-memory stream implementation.
  • Titanium.Stream.BlobStream, a read-only stream specifically for reading from Titanium Blobs.
  • Titanium.Filesystem.FileStream, for reading and writing files on the mobile device.
  • Titanium.Network.Socket.TCP, a TCP socket implementation which, among other things, implements the Stream interface. Sockets, of course, have lots of other interesting features beyond their stream implementation, and therefore there will be another installment of this article series devoted to sockets. We won't cover sockets any further in this article.

BufferStream

Buffers are basically resizable byte arrays. A BufferStream reads or writes the bytes in a Buffer in a serial fashion and maintains an internal pointer to the current read/write position in the Buffer. So rather than needing to read or write each individual byte in a Buffer, you can read or write a series of bytes using a BufferStream.

One use-case might be if you want to prepare a message in its entirety before opening a socket and sending the message. You can use a BufferStream to assemble the message in a buffer in memory, then later pass that buffer to a socket write operation.

BufferStream examples

Here's a simple example of writing strings to a BufferStream and then reading them back.

ex01-bufferstream-create.js
ex02-bufferstream-write.js
ex03-bufferstream-resetlength.js
ex04-bufferstream-create2.js
ex05-bufferstream-readchunks.js
ex07-bufferstream-decode.js

FileStream

The FileStream, surprise surprise, helps you read from and write to files on the mobile device. This can have memory advantages, such as if you want to read and write in chunks rather than pull a file's entire contents into memory at one time.

There are two ways to get a FileStream instance. If you already have a File object, you can open a stream for it by using the new open method of Titanium.Filesystem.File. Alternatively, you can skip getting the File object if you have no other use for it and instead get a stream directly with the new Titanium.Filesystem.openStream method.

The supported modes are Titanium.Filesystem.MODE_READ, Titanium.Filesytem.MODE_WRITE and Titanium.Filesytem.MODE_APPEND.

FileStream examples

This simple example reads and writes a file in 1K chunks rather than loading up the entirety of the file in memory. In this example we get streams by first getting <code>File</code> objects then calling their open() methods. However, in the case of the output file, we show the alternative openStream(...) method as well in a commented line.

ex01-filestream-getfile.js
ex02-filestream-openread.js
ex03-filestream-getoutfile.js
ex04-filestream-openwrite.js
ex04a-filestream-openstream.js
ex05-filestream-buffer.js
ex06-filestream-loopreadwrite.js
ex07-filestream-cleanup.js

BlobStream

The BlobStream is a read-only stream that provides you with the ability to read blobs in chunks rather than load them up completely in memory. Blobs appear in a few places throughout the Titanium API, such as in Titanium.Media when dealing with images from the camera and photo gallery. You read from a BlobStream in the same manner you would for a BufferStream or a FileStream.

BlobStream examples

In this example, we use Titanium.Media.showCamera to take a photo and stream its bytes to a file.

ex01-blobstream-full.js
  • No labels

1 Comment

  1. I have a query on Blob stream concept.Is there any way to read data from Blob object without writing it to a file or directly viewing the contents of Blob object?.Thnx