|
Lines 75-101
Link Here
|
| 75 |
bufInputStream.read(buffer, 0, fileLength); |
75 |
bufInputStream.read(buffer, 0, fileLength); |
| 76 |
bufInputStream.close(); |
76 |
bufInputStream.close(); |
| 77 |
inputStream.close(); |
77 |
inputStream.close(); |
| 78 |
|
|
|
| 79 |
ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, fileLength); |
| 80 |
|
| 81 |
// convert from the remote encoding |
| 82 |
CharBuffer decodedBuf = null; |
| 83 |
decodedBuf = rmtDecoder.decode(rmtBuf); |
| 84 |
// for conversion to the local encoding |
| 85 |
Charset charset = Charset.forName(localEncoding); |
| 86 |
CharsetEncoder encoder = charset.newEncoder(); |
| 87 |
byte[] localBuffer = null; |
| 88 |
// convert to the specified local encoding |
| 89 |
ByteBuffer lclBuf = encoder.encode(decodedBuf); |
| 90 |
localBuffer = lclBuf.array(); |
| 91 |
|
| 92 |
// use the limit rather than the array length to avoid unwanted nulls |
| 93 |
outStream = new FileOutputStream(file); |
78 |
outStream = new FileOutputStream(file); |
| 94 |
outStream.write(localBuffer, 0, lclBuf.limit()); |
79 |
convertBuffer(buffer, rmtDecoder, fileLength, localEncoding, outStream); |
| 95 |
} |
80 |
} |
| 96 |
else { // read and write sections of file at a time |
81 |
else { // read and write sections of file at a time |
| 97 |
int inOffset = 0; |
82 |
int inOffset = 0; |
| 98 |
int outOffset = 0; |
|
|
| 99 |
|
83 |
|
| 100 |
File altFile = new File(file.getAbsolutePath() + "~"); //$NON-NLS-1$ |
84 |
File altFile = new File(file.getAbsolutePath() + "~"); //$NON-NLS-1$ |
| 101 |
outStream = new FileOutputStream(altFile); // using alternate file because we're writing while reading |
85 |
outStream = new FileOutputStream(altFile); // using alternate file because we're writing while reading |
|
Lines 104-131
Link Here
|
| 104 |
if (inOffset + MAX_READ > fileLength){ |
88 |
if (inOffset + MAX_READ > fileLength){ |
| 105 |
readSize = fileLength - inOffset; |
89 |
readSize = fileLength - inOffset; |
| 106 |
} |
90 |
} |
| 107 |
|
|
|
| 108 |
byte[] buffer = new byte[readSize]; |
91 |
byte[] buffer = new byte[readSize]; |
| 109 |
inputStream.read(buffer, 0, readSize); |
92 |
inputStream.read(buffer, 0, readSize); |
| 110 |
inOffset += readSize; |
93 |
inOffset += readSize; |
| 111 |
ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, readSize); |
94 |
convertBuffer(buffer, rmtDecoder, readSize, localEncoding, outStream); |
| 112 |
|
|
|
| 113 |
// convert from the remote encoding |
| 114 |
CharBuffer decodedBuf = null; |
| 115 |
decodedBuf = rmtDecoder.decode(rmtBuf); |
| 116 |
|
| 117 |
// for conversion to the local encoding |
| 118 |
Charset charset = Charset.forName(localEncoding); |
| 119 |
CharsetEncoder encoder = charset.newEncoder(); |
| 120 |
byte[] localBuffer = null; |
| 121 |
// convert to the specified local encoding |
| 122 |
ByteBuffer lclBuf = encoder.encode(decodedBuf); |
| 123 |
localBuffer = lclBuf.array(); |
| 124 |
|
| 125 |
// use the limit rather than the array length to avoid unwanted nulls |
| 126 |
int writeSize = lclBuf.limit(); |
| 127 |
outStream.write(localBuffer, 0, writeSize); |
| 128 |
outOffset += writeSize; |
| 129 |
} |
95 |
} |
| 130 |
inputStream.close(); |
96 |
inputStream.close(); |
| 131 |
outStream.close(); |
97 |
outStream.close(); |
|
Lines 151-156
Link Here
|
| 151 |
} |
117 |
} |
| 152 |
} |
118 |
} |
| 153 |
} |
119 |
} |
|
|
120 |
|
| 121 |
private void convertBuffer(byte[] buffer, CharsetDecoder rmtDecoder, int readSize, String localEncoding, FileOutputStream outStream) throws Exception{ |
| 122 |
ByteBuffer rmtBuf = ByteBuffer.wrap(buffer, 0, readSize); |
| 123 |
|
| 124 |
// convert from the remote encoding |
| 125 |
CharBuffer decodedBuf = null; |
| 126 |
decodedBuf = rmtDecoder.decode(rmtBuf); |
| 127 |
|
| 128 |
// for conversion to the local encoding |
| 129 |
Charset charset = Charset.forName(localEncoding); |
| 130 |
CharsetEncoder encoder = charset.newEncoder(); |
| 131 |
byte[] localBuffer = null; |
| 132 |
|
| 133 |
// convert to the specified local encoding |
| 134 |
ByteBuffer lclBuf = encoder.encode(decodedBuf); |
| 135 |
localBuffer = lclBuf.array(); |
| 136 |
|
| 137 |
// use the limit rather than the array length to avoid unwanted nulls |
| 138 |
int writeSize = lclBuf.limit(); |
| 139 |
outStream.write(localBuffer, 0, writeSize); |
| 140 |
} |
| 154 |
|
141 |
|
| 155 |
public boolean isServerEncodingSupported(String remoteEncoding, |
142 |
public boolean isServerEncodingSupported(String remoteEncoding, |
| 156 |
IFileService fs) { |
143 |
IFileService fs) { |