docs: def _writeString(self, obj, use_reference=True):
          """
          Appends a string to the serialization stream
  
          :param obj: String to serialize
          :param use_reference: If True, allow writing a reference
          """
          # TODO: Convert to "modified UTF-8"
          # http://docs.oracle.com/javase/7/docs/api/java/io/DataInput.html#modified-utf-8
          string = to_bytes(obj, "utf-8")
  
          if use_reference and isinstance(obj, JavaString):
              try:
                  idx = self.references.index(obj)
              except ValueError:
                  # First appearance of the string
                  self.references.append(obj)
                  logging.debug(
                      "*** Adding ref 0x%X for string: %s",
                      len(self.references) - 1 + self.BASE_REFERENCE_IDX,
                      obj,
                  )
  
                  self._writeStruct(">H", 2, (len(string),))
                  self.object_stream.write(string)
              else:
                  # Write a reference to the previous type
                  logging.debug(
                      "*** Reusing ref 0x%X for string: %s",
                      idx + self.BASE_REFERENCE_IDX,
                      obj,
                  )
                  self.write_reference(idx)
          else:
              self._writeStruct(">H", 2, (len(string),))
              self.object_stream.write(string)