Your output suggest that you are expecting to write the HTML using charset=ISO-2022-JP but DataOutputStream.writeChars() just writes each char as two bytes (high byte then low byte) so is equivalent to utf-16 big endian. Rather than use a DataOutputStream you should use an OutputStreamWriter specifying ISO2022JP encoding.
Retired horse trader.
Note: double-underline links may be advertisements automatically added by this site and are probably not endorsed by me.
We need to know a little bit more about what you're doing.
You're using DataOutputStream, which is going to write java primitives; your characters will all then be written in Unicode, two bytes per character, and I don't know if that's what you want or not.
I don't know what you're using to display the output you've shown us; when I run this, I don't get the same thing. But I'm running on a computer and with programs that expect 8-bit characters. If I change "writeChars" to "writeUTF", I get something more readable, but I don't get anything strange after each left angle bracket.
The other thing I've noticed is that none of the attribute values in your HTML have quotes around them -- assuming you want a browser to display this, you're going to need that -- <table BORDER="0" etc.