Skip to content

Commit 01e90bb

Browse files
kilinksbrannen
authored andcommitted
Use Long.parseLong(CharSequence,...) to avoid intermediate String creation
Where possible, switch to the Long.parseLong variant that accepts a start and end index for the supplied CharSequence, thus avoiding making unnecessary copies of the String input. Closes gh-30710
1 parent af1c069 commit 01e90bb

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

spring-core/src/main/java/org/springframework/util/unit/DataSize.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,11 @@ public static DataSize parse(CharSequence text) {
174174
public static DataSize parse(CharSequence text, @Nullable DataUnit defaultUnit) {
175175
Assert.notNull(text, "Text must not be null");
176176
try {
177-
Matcher matcher = DataSizeUtils.PATTERN.matcher(StringUtils.trimAllWhitespace(text));
177+
CharSequence trimmedText = StringUtils.trimAllWhitespace(text);
178+
Matcher matcher = DataSizeUtils.PATTERN.matcher(trimmedText);
178179
Assert.state(matcher.matches(), "Does not match data size pattern");
179180
DataUnit unit = DataSizeUtils.determineDataUnit(matcher.group(2), defaultUnit);
180-
long amount = Long.parseLong(matcher.group(1));
181+
long amount = Long.parseLong(trimmedText, matcher.start(1), matcher.end(1), 10);
181182
return DataSize.of(amount, unit);
182183
}
183184
catch (Exception ex) {

spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,11 @@ public boolean isHeartbeat() {
239239

240240
public long[] getHeartbeat() {
241241
String rawValue = getFirstNativeHeader(STOMP_HEARTBEAT_HEADER);
242-
String[] rawValues = StringUtils.split(rawValue, ",");
243-
if (rawValues == null) {
242+
int pos = rawValue != null ? rawValue.indexOf(',') : -1;
243+
if (pos == -1) {
244244
return Arrays.copyOf(DEFAULT_HEARTBEAT, 2);
245245
}
246-
return new long[] {Long.parseLong(rawValues[0]), Long.parseLong(rawValues[1])};
246+
return new long[] {Long.parseLong(rawValue, 0, pos, 10), Long.parseLong(rawValue, pos + 1, rawValue.length(), 10)};
247247
}
248248

249249
public void setAcceptVersion(String acceptVersion) {

spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaders.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,11 @@ public void setHeartbeat(@Nullable long[] heartbeat) {
280280
@Nullable
281281
public long[] getHeartbeat() {
282282
String rawValue = getFirst(HEARTBEAT);
283-
String[] rawValues = StringUtils.split(rawValue, ",");
284-
if (rawValues == null) {
283+
int pos = rawValue != null ? rawValue.indexOf(',') : -1;
284+
if (pos == -1) {
285285
return null;
286286
}
287-
return new long[] {Long.parseLong(rawValues[0]), Long.parseLong(rawValues[1])};
287+
return new long[] {Long.parseLong(rawValue, 0, pos, 10), Long.parseLong(rawValue, pos + 1, rawValue.length(), 10)};
288288
}
289289

290290
/**

spring-web/src/main/java/org/springframework/http/HttpRange.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,17 @@ private static HttpRange parseRange(String range) {
147147
Assert.hasLength(range, "Range String must not be empty");
148148
int dashIdx = range.indexOf('-');
149149
if (dashIdx > 0) {
150-
long firstPos = Long.parseLong(range.substring(0, dashIdx));
150+
long firstPos = Long.parseLong(range, 0, dashIdx, 10);
151151
if (dashIdx < range.length() - 1) {
152-
Long lastPos = Long.parseLong(range.substring(dashIdx + 1));
152+
Long lastPos = Long.parseLong(range, dashIdx + 1, range.length(), 10);
153153
return new ByteRange(firstPos, lastPos);
154154
}
155155
else {
156156
return new ByteRange(firstPos, null);
157157
}
158158
}
159159
else if (dashIdx == 0) {
160-
long suffixLength = Long.parseLong(range.substring(1));
160+
long suffixLength = Long.parseLong(range, 1, range.length(), 10);
161161
return new SuffixByteRange(suffixLength);
162162
}
163163
else {

0 commit comments

Comments
 (0)