blob: 4616bc9f3e9827a4154c105cf1b4d47f9e9367f1 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.compiler;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class CompilerIOUtil {
private final static ThreadLocal<byte[]> myBuffer = new ThreadLocal<byte[]>() {
protected byte[] initialValue() {
return new byte[1024];
}
};
private CompilerIOUtil() {}
public static String readString(DataInput stream) throws IOException {
final int length = stream.readInt();
if (length == -1) {
return null;
}
if (length == 0) {
return "";
}
char[] chars = new char[length];
int charsRead = 0;
final byte[] buff = myBuffer.get();
while (charsRead < length) {
final int bytesRead = Math.min((length - charsRead) * 2, buff.length);
stream.readFully(buff, 0, bytesRead);
for (int i = 0 ; i < bytesRead; i += 2) {
chars[charsRead++] = (char)((buff[i] << 8) + (buff[i + 1] & 0xFF));
}
}
return new String(chars);
}
public static void writeString(String s, DataOutput stream) throws IOException {
if (s == null) {
stream.writeInt(-1);
return;
}
final int len = s.length();
stream.writeInt(len);
if (len == 0) {
return;
}
int charsWritten = 0;
final byte[] buff = myBuffer.get();
while (charsWritten < len) {
final int bytesWritten = Math.min((len - charsWritten) * 2, buff.length);
for (int i = 0; i < bytesWritten; i += 2) {
char aChar = s.charAt(charsWritten++);
buff[i] = (byte)((aChar >>> 8) & 0xFF);
buff[i + 1] = (byte)((aChar) & 0xFF);
}
stream.write(buff, 0, bytesWritten);
}
}
}