Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/DataSerializer.java @ 645:14dac192aa26
Push: phase2 - upload bundle with changes to remote server
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 20 Jun 2013 19:15:09 +0200 |
| parents | 6526d8adbc0f |
| children | 545b1d4cc11d |
comparison
equal
deleted
inserted
replaced
| 644:1deea2f33218 | 645:14dac192aa26 |
|---|---|
| 15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
| 16 */ | 16 */ |
| 17 package org.tmatesoft.hg.internal; | 17 package org.tmatesoft.hg.internal; |
| 18 | 18 |
| 19 import java.io.ByteArrayOutputStream; | 19 import java.io.ByteArrayOutputStream; |
| 20 import java.io.IOException; | |
| 21 import java.io.OutputStream; | |
| 20 | 22 |
| 21 import org.tmatesoft.hg.core.HgIOException; | 23 import org.tmatesoft.hg.core.HgIOException; |
| 22 import org.tmatesoft.hg.repo.HgRuntimeException; | 24 import org.tmatesoft.hg.repo.HgRuntimeException; |
| 23 | 25 |
| 24 /** | 26 /** |
| 72 | 74 |
| 73 /** | 75 /** |
| 74 * Denotes an entity that wants to/could be serialized | 76 * Denotes an entity that wants to/could be serialized |
| 75 */ | 77 */ |
| 76 @Experimental(reason="Work in progress") | 78 @Experimental(reason="Work in progress") |
| 77 interface DataSource { | 79 public interface DataSource { |
| 78 /** | 80 /** |
| 79 * Invoked once for a single write operation, | 81 * Invoked once for a single write operation, |
| 80 * although the source itself may get serialized several times | 82 * although the source itself may get serialized several times |
| 81 */ | 83 */ |
| 82 public void serialize(DataSerializer out) throws HgIOException, HgRuntimeException; | 84 public void serialize(DataSerializer out) throws HgIOException, HgRuntimeException; |
| 105 public int serializeLength() { | 107 public int serializeLength() { |
| 106 return data == null ? 0 : data.length; | 108 return data == null ? 0 : data.length; |
| 107 } | 109 } |
| 108 } | 110 } |
| 109 | 111 |
| 110 public static class ByteArrayDataSerializer extends DataSerializer { | 112 /** |
| 113 * Serialize data to byte array | |
| 114 */ | |
| 115 public static class ByteArraySerializer extends DataSerializer { | |
| 111 private final ByteArrayOutputStream out = new ByteArrayOutputStream(); | 116 private final ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| 112 | 117 |
| 113 @Override | 118 @Override |
| 114 public void write(byte[] data, int offset, int length) { | 119 public void write(byte[] data, int offset, int length) { |
| 115 out.write(data, offset, length); | 120 out.write(data, offset, length); |
| 117 | 122 |
| 118 public byte[] toByteArray() { | 123 public byte[] toByteArray() { |
| 119 return out.toByteArray(); | 124 return out.toByteArray(); |
| 120 } | 125 } |
| 121 } | 126 } |
| 127 | |
| 128 /** | |
| 129 * Bridge to the world of {@link java.io.OutputStream}. | |
| 130 * Caller instantiates the stream and is responsible to close it as appropriate, | |
| 131 * {@link #done() DataSerializer.done()} doesn't close the stream. | |
| 132 */ | |
| 133 public static class OutputStreamSerializer extends DataSerializer { | |
| 134 private final OutputStream out; | |
| 135 | |
| 136 public OutputStreamSerializer(OutputStream outputStream) { | |
| 137 out = outputStream; | |
| 138 } | |
| 139 | |
| 140 @Override | |
| 141 public void write(byte[] data, int offset, int length) throws HgIOException { | |
| 142 try { | |
| 143 out.write(data, offset, length); | |
| 144 } catch (IOException ex) { | |
| 145 throw new HgIOException(ex.getMessage(), ex, null); | |
| 146 } | |
| 147 } | |
| 148 } | |
| 122 } | 149 } |
