Java NIO ByteBuffer: put and get strings
java
Solution
Writing part:
for (int i = 0; i < prices.length; i++) {
buf.putDouble(prices[i]);
buf.putInt(units[i]);
byte[] descsBytes = descs[i].getBytes();
buf.putInt(descsBytes.length);
buf.put(descsBytes);
}
Reading part:
while (buf.hasRemaining()) {
price = buf.getDouble();
unit = buf.getInt();
int len = buf.getInt();
byte[] bytes = new byte[len];
buf.get(bytes);
desc = new String(bytes);
System.out.format("You ordered %d" + " units of %s at $%.2f%n",
unit, desc, price);
total += unit * price;
}
Problem
I've the following test code. I'd like to know how I can put, and get a String using a Java NIO ByteBuffer. I've added two comments where I need help. ``` package testPipe; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; public class TestMemBuff { static final String dataFile = "invoicedata"; static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; static final int[] units = { 12, 8, 13, 29, 50 }; static final String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" }; public static Charset charset = Charset.forName("UTF-8"); public static CharsetEncoder encoder = charset.newEncoder(); public static CharsetDecoder decoder = charset.newDecoder(); public static void main(String[] args) throws UnsupportedEncodingException { double price; int unit; String desc; double total = 0.0; ByteBuffer buf = ByteBuffer.allocate(1024); for (int i = 0; i < prices.length; i++) { buf.putDouble(prices[i]); buf.putInt(units[i]); buf.asCharBuffer().put(descs[i]); // Is it correct? } buf.flip(); // INPUT while (buf.hasRemaining()) { price = buf.getDouble(); unit = buf.getInt(); desc = buf.asCharBuffer().toString(); //This must be wrong! System.out.format("You ordered %d" + " units of %s at $%.2f%n", unit, desc, price); total += unit * price; } } } ``` This is the output when I execute it: ``` You ordered 12 units of ???? [...] ``` and so on. Thanks for your attention