Instead of UTF-16, think of 'internal representation' of your string. A string in Java is some sort of characters, you don't care which encoding is used internally. Encoding becomes relevant, if you interact with the outside of the program. In your example saveTextInDb, readTextFromDb and write do that. Every time you exchange strings with the outside, an encoding for conversion is used. saveTextInDb (and read) look like self-made methods, at least I don't know them. So you should look up, which encoding is used for this methods. The method write of a Writer always creates bytes, that represent an encoding associated with the writer. If you get your Writer from a HttpServletResponse, the encoding associated is the one used for outputting the response (that will be send in the headers).
response.setEncoding("UTF-8");
Writer out = response.getWriter();
This code returns with out a Writer, that translates the strings into UTF-8-encoding. Similar if you write to a file:
Writer fileout = new OutputStreamWriter(new FileOutputStream(myfile), "ISO8859-1");
If you access a DB, the framework you use should ensure a consistent exchange of strings with the database.