summaryrefslogtreecommitdiffstats
blob: 53cb974c5768df5fb5b6c410e2ccead91fa49d47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 * Copyright (c) 2010-2015 Isode Limited.
 * All rights reserved.
 * See the COPYING file for more information.
 */
/*
 * Copyright (c) 2015 Tarun Gupta.
 * Licensed under the simplified BSD license.
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 */

package com.isode.stroke.filetransfer;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.isode.stroke.base.ByteArray;

public class FileReadBytestream extends ReadBytestream {

	private String file;
	private FileInputStream stream;

	public FileReadBytestream(final String file) {
		this.file = file;
		this.stream = null;
	}

	public ByteArray read(int size) {
		try {
			if (stream == null) {
				stream = new FileInputStream(file);
			}
			//assert(stream.good());
			byte[] buffer = new byte[size];
			stream.read(buffer, 0, size);
			ByteArray result = new ByteArray(buffer);
			onRead.emit(result);
			return result;
		}
		catch (FileNotFoundException e) {
			return null;
		}
		catch (IOException e) {
			return null;
		} finally {
			try {
				if(stream != null) stream.close();
			}
			catch (IOException e) {
				// Needs a catch clause
			}
		}
	}

	public boolean isFinished() {
		return stream != null;
	}
}