private static Endian getEndiannessFromBOM(ByteBuffer bb, int charSize) {
		if (bb.remaining() < charSize) {
			return null;
		}

		byte[] bytes = new byte[charSize];
		bb.get(0, bytes);

		int be_val = (int) BigEndianDataConverter.INSTANCE.getValue(bytes, charSize);
		Endian result = switch (be_val) {
			case StringUtilities.UNICODE_BE_BYTE_ORDER_MARK -> Endian.BIG;
			case StringUtilities.UNICODE_LE16_BYTE_ORDER_MARK, 
				StringUtilities.UNICODE_LE32_BYTE_ORDER_MARK -> Endian.LITTLE;
			default -> null;
		};
		if (result != null) {
			// consume the BOM bytes
			bb.position(charSize);
		}
		return result;
	}
Returns the string contained in the specified {@link MemBuffer}, or null if all the bytes of
the string could not be read.
<p>
This method deals in characters of size {@link #charSize}, that might be
{@link #paddedCharSize padded} to a larger size. The raw n-byte characters are converted into
a Java String using a Java {@link Charset} or by using a custom Ghidra conversion. (see
convertBytesToStringCustomCharset)
<p>
The MemBuffer's endian'ness is used to determine which end of the {@link #paddedCharSize
padded } field contains our {@link #charSize} character bytes which will be used to create
the java String.

@return String containing the characters in buf or null if unable to read all {@code length}
        bytes from the membuffer.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java